gpt4 book ai didi

java - Hibernate - 将列存储为加密,并仅在运行时解密

转载 作者:IT王子 更新时间:2023-10-28 23:52:18 26 4
gpt4 key购买 nike

当从支持 hibernate 的 web 应用程序传递时,我有一个需要加密的数据库列。 webapp 在 tomcat 6、Hibernate 4 和 Mysql 上作为后备存储。

但问题是加密/解密此字段的密码仅在程序运行时可用。最初我希望使用 AES_ENCRYPT/DECRYPT 方法,这里概述得很好:

DataBase encryption in Hibernate

这里:

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

(虽然这里指的是hibernate 3.6版本,但我相信4.0应该也是一样的)。

但是,由于它使用以下符号:

@Column(columnDefinition= "LONGBLOB", name="encryptedBody") 
@ColumnTransformer(
read="AES_DECRYPT(encryptedBody, 'password')",
write="AES_ENCRYPT(?, 'password')")
public byte[] getEncryptedBody() {
return encryptedBody;
}

public void setEncryptedBody(byte[] encryptedBody) {
this.encryptedBody = encryptedBody;
}

这要求在注解中指定密码,并且不能是变量。

有没有办法以这种方式通过hibernate使用数据库方法,但将密码作为变量?有更好的方法吗?

最佳答案

目前没有办法参数化读/写片段的片段。它们更像是通用解决方案。我们已经讨论了在 Hibernate 中添加对 @Encrypted 的支持,这将大致按照您的建议行事。 @Encrypted 会提供更大的灵 active ,例如 in-vm 加密与 in-db 加密、参数化等。

JPA 2.1 还有一个您可以使用的功能,称为属性转换器。但是,他们只能应用虚拟机内加密。

关于java - Hibernate - 将列存储为加密,并仅在运行时解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16918816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com