Jor*_*son 11 java mysql security encryption hibernate
当从hibernate支持的webapp传递时,我有一个需要加密的数据库列.webapp在tomcat 6,Hibernate 4和Mysql上作为后备存储.
但问题是加密/解密此字段的密码只能在程序运行时使用.最初我曾希望使用AES_ENCRYPT/DECRYPT方法,这里概述得很好:
和这里:
(虽然这确实是指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;
}
Run Code Online (Sandbox Code Playgroud)
这要求在注释本身中指定密码,并且不能是变量.
有没有办法以这种方式通过hibernate使用数据库方法,但是将密码作为变量?有更好的方法吗?
目前还没有一种方法可以参数化读/写片段的片段。它们更多的是作为通用解决方案。我们已经讨论过在 Hibernate 中添加对 @Encrypted 的支持,大致就像您建议的那样。@Encrypted 将提供更大的灵活性,例如虚拟机内加密与数据库内加密、参数化等。
JPA 2.1 还有一个可以使用的功能,称为属性转换器。然而,他们只能应用虚拟机内加密。