如何使用休眠插入加密数据

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'),...)

希望能解决您的问题。

干杯。

【讨论】:

以上是关于如何使用休眠插入加密数据的主要内容,如果未能解决你的问题,请参考以下文章

休眠中的时间戳

如何使用注释创建休眠复合键

如何让安卓设备在插入时不休眠

如何使用 rest api 在休眠状态下插入表中,并且在该表 2 列上是另一个表的外键?

无法使用休眠插入数据库[关闭]

无法使用休眠插入 hsql 数据库