java - Hibernate 中的数据库加密

标签 java database hibernate

使用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。如果您有不同的数据库引擎,请查找类似的功能。

希望这对您有所帮助。

关于java - Hibernate 中的数据库加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5621422/

相关文章:

database - VBA 中的记录集是什么? ... 它的作用是什么?

java - 使用 Hibernate ConstraintViolationException

java - 多命名空间包信息 Java

java - XmlUnit 在比较 XML 文件时忽略元素的顺序

MySQL max() - 不返回 max() 值

java - Hibernate以随机顺序保存记录

java - Hibernate 未设置引用列

java - 客户端捕获 Web 服务用户异常 [Java 6.0.17]

java - 在最后两行不相同的每一行上写0's and 1'

java - mysql命令应该完成哪些流程,Java应该完成哪些流程?