java jpa字段加密解密

公司有个需求,人员身份证号码入库时需要加密,取出时需要解密。由于系统中没有设计加密解密方式,所以需业务中单独处理。

之前考虑加拦截器,后来发现需求不会很大,这种方式太复杂没有必要。

首先添加一个类,处理加密解密操作。

public class EncryptConverter implements AttributeConverter<String, String> {

/**

* 加密.

*/

@Override

public String convertToDatabaseColumn(String text) {

// ... 加解密实现

if(StringUtil.isEmpty(text)){

return "";

}else{

return SecurityUtil.doEncrypt(text);

}

}

/**

* 解密.

*/

@Override

public String convertToEntityAttribute(String s) {

// ... 加解密实现

if(StringUtil.isEmpty(s)){

return "";

}else{

return SecurityUtil.doDecrypt(s);

}

}

}

然后在相应的实体中需要加密的字段上添加注解

@Convert(converter = EncryptConverter.class)

这样就完成了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用 PostgreSQL 数据库时,可以使用 PostgreSQL 内置的加密函数或自定义函数来实现解密操作。以下是一种可能的解决方案: 1. 创建一个加密转换器类,实现 `javax.persistence.AttributeConverter` 接口,重写 `convertToDatabaseColumn` 和 `convertToEntityAttribute` 方法,用于加密和解密数据。例如: ```java import javax.persistence.AttributeConverter; import javax.persistence.Converter; @Converter public class EncryptionConverter implements AttributeConverter<String, String> { @Override public String convertToDatabaseColumn(String attribute) { // 实现加密逻辑 return encryptedValue; } @Override public String convertToEntityAttribute(String dbData) { // 实现解密逻辑 return decryptedValue; } } ``` 2. 在需要加密的属性上添加 `@Convert` 注解,指定使用的转换器。例如: ```java @Entity public class User { @Id private Long id; @Convert(converter = EncryptionConverter.class) private String password; // 其他属性和方法... } ``` 3. 在 SQL 查询中使用 PostgreSQL 内置的解密函数或自定义函数进行解密。以下是一个示例: ```sql SELECT id, pgp_sym_decrypt(password::bytea, 'encryptionKey') AS decrypted_password FROM user; ``` 这里使用 PostgreSQL 的 `pgp_sym_decrypt` 函数对密码进行解密,`encryptionKey` 是加密时使用的密钥。 需要注意的是,直接在 SQL 查询中解密数据可能会影响性能,并且可能会暴露加密密钥。因此,在实际应用中,建议在应用层面进行解密操作,而不是直接在 SQL 查询中解密。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值