Java Hibernate中的数据库加密

Java Hibernate中的数据库加密,java,database,hibernate,Java,Database,Hibernate,使用hibernate时如何加密数据库字段 我们已经开发了该产品,一些客户正在使用该应用程序,一些客户正在询问有关数据库加密的问题 是否有可能在应用程序级别加密数据,而无需对代码进行更多更改 请尽快给我建议。我想你们正在寻找柱式变压器。您可以在Hibernate参考中找到如何执行此操作: 我希望这有帮助 试试这个: 在实体中放置属性: private byte[] encryptedBody; 使用此getter和setter: @Column(columnDefinition= "LON

使用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_解密和AES_加密属于MySQL。如果您有不同的数据库引擎,请查找类似的函数

希望这有帮助。

您可以使用。它有一个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将能够在读取实体属性时加密实体属性,并在读取实体时对其进行解密。

可能重复Tip以供跨数据库使用-您可以创建用于处理加密和解密的存储过程(或函数),并通过@ColumnTransformer注释调用这些过程。因此,当您必须移植到另一个数据库时,您只需要在数据库本身中实现这些,而bob是您的叔叔。其基本思想是,只有访问DB的权限,您将无法解密该值。那么,如果有一个内置或存储过程来实现这一点,那又有什么意义呢?我的意思是,通常情况下,客户端应该负责加密和解密数据……这是一个完美的解决方案。但是这些信息是远程转换并加密发送回来的,还是加密将在hibernate端进行?(对java进程来说是本地的?)