Hibernate中的DataBase加密
使用hibernate时如何加密数据库字段?
我们开发了一些客户正在使用该应用程序的产品一些客户端询问数据库加密是否有可能在应用程序级别加密数据而代码中没有更多更改。
请尽快给我建议。
尝试这个:
在您的实体中放置一个属性:
private byte[] encryptedBody;
使用此getter和setter:
@Column(columnDefinition= "LONGBLOB", name="encryptedBody") @ColumnTransformer( read="AES_DECRYPT(encryptedBody, 'yourkey')", write="AES_ENCRYPT(?, 'yourkey')") public byte[] getEncryptedBody() { return encryptedBody; } public void setEncryptedBody(byte[] encryptedBody) { this.encryptedBody = encryptedBody; }
然后当您重新使用列时:
private final Charset UTF8_CHARSET = Charset.forName("UTF-8"); String decodeUTF8(byte[] bytes) { return new String(bytes, UTF8_CHARSET); } String s = decodeUTF8(entity.getEncryptedBody());
请注意 :AES_DECRYPT和AES_ENCRYPT属于MySQL。 如果您有不同的数据库引擎,请找到类似的function。
希望这可以帮助。
我认为你正在寻找列变压器。 您可以在Hibernate参考中找到如何执行此操作:
我希望有所帮助!
你可以使用jasypt 。 它具有Hibernate集成,允许您在保存时加密属性(并在加载时解密)。
如本文所述 ,您可以使用@ColumnTransformer
注释,如下所示:
@ColumnTransformer( read = "pgp_sym_decrypt(" + " storage, " + " current_setting('encrypt.key')" + ")", write = "pgp_sym_encrypt( " + " ?, " + " current_setting('encrypt.key')" + ") " ) @Column(columnDefinition = "bytea") private String storage;
这样,Hibernate将能够在您持久化或合并时加密实体属性,并在您读取实体时对其进行解密。
- 寻找一个不被弃用的会话工厂
- Struts + Hibernate:@SessionTarget无效
- 使用hibernate只在数据库中保存时间
- JPA 2.0 Hibernate @OneToMany + @MapKeyJoinColumn
- Java JPA GenerationType.Auto值始终为null
- JPA使用替代“persistence.xml”
- NoSuchMethodError:javax.persistence.JoinColumn.foreignKey()
- 复制一组实体并在Hibernate / JPA中保留
- Hibernateexception_ $$ _ javassist_0无法强制转换为javassist.util.proxy.Proxy