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参考中找到如何执行此操作:

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html#mapping-column-read-and-write

我希望有所帮助!

你可以使用jasypt 。 它具有Hibernate集成,允许您在保存时加密属性(并在加载时解密)。

http://www.jasypt.org/hibernate.html

如本文所述 ,您可以使用@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将能够在您持久化或合并时加密实体属性,并在您读取实体时对其进行解密。

如果您需要使用Java的密码,您可以使用此库。 它为hibernate映射带来了新的类型字段。

https://github.com/zubial/hibernate-encrypt

@#