【问题标题】: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 方式执行此操作? 您如何处理使用提供的密钥加密数据库中的字段的要求?

【问题讨论】:

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

    希望能解决您的问题。

    干杯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多