如何使用休眠插入加密数据
Posted
技术标签:
【中文标题】如何使用休眠插入加密数据【英文标题】:How to Insert The encrypted data using hibernate 【发布时间】:2013-10-22 11:40:16 【问题描述】:Hibernate 提供了通过 save() 方法将记录插入数据库的方法。 前任: User() user = new User(int id, String name); userDAO.save(user);
这很棒。 但是我被困在这个: 我需要执行此查询以向表用户插入一条记录 SQL查询:“插入用户值(“我的名字”,AES_ENCRYPT(“clear_txt”,“key”)); 举个例子:我的表用户有两个字段:“名称”和“密码”。使用某些密钥加密所需的密码。 AES_ENCRYPT 是 mysql 中的一个函数。
如何以 Hibernate 方式执行此操作? 您如何处理使用提供的密钥加密数据库中的字段的要求?
【问题讨论】:
【参考方案1】:您可以在保存到数据库之前使用 Java 进行加密,或者您可以使用 ColumnTransformer
自定义 SQL 表达式用于从列中读取值并将值写入列。用于直接对象加载/保存以及查询。写表达式必须恰好包含一个“?”值的占位符。例如:read="decrypt(credit_card_num)" write="encrypt(?)"
【讨论】:
您点击了链接吗?你没有得到什么? 我想使用 Mysql aes_encrypt() 函数..在哪里写这个?以及如何使用读写? 将decrypt(credit_card_num)
替换为 AES_DECRYPT(password, 'key'))
和 encrypt(?)
by AES_ENCRYPT(?, 'key')
。我认为该示例与您的要求足够接近...
我明白这一点,但在代码中在哪里使用?我有一个没有注释的 bean 类(setter/getter)
public String getInterfaceType() return interfaceType; public void setInterfaceType(String interfaceType) this.interfaceType = interfaceType; public String getCircle() 返回圈子;这是我的 Bean,现在在哪里提到必须加密的列【参考方案2】:
如何以 Hibernate 方式执行此操作?您如何处理使用提供的密钥加密数据库中的字段的要求?
使用 MySQL 的休眠方式:
// `username` varchar(255) DEFAULT NULL,
@Column(name = "username")
@ColumnTransformer(
read = "cast(aes_decrypt(username, 'yourkey') as char(255))",
write = "aes_encrypt(?, 'yourkey')")
private String username;
Hibernate 在获取过程中会将用户名列转换为 sql:
休眠:选择 this_.id 作为 id1_6_4_, ..., cast(aes_decrypt(this_.kronologis, 'ABC') as char(1020)) as kronolo11_6_4_,...
保存期间:
休眠:插入 e010_k2_pusdalops.kejadian (...kronologis...) 值 (..., aes_encrypt(?, 'ABC'),...)
希望能解决您的问题。
干杯。
【讨论】:
以上是关于如何使用休眠插入加密数据的主要内容,如果未能解决你的问题,请参考以下文章