mysql 给指定表中的数据进行加密

1.最近在写项目时牵扯到了数据库加密问题,因此就趁机把数据库加密这块简单了解了下.
2.mysql 数据库加密方式好像有四五种方式,我用的是AES_DECRYPT函数对相关字段进行加密
3.加密用的函数是AES_ENCRYPT(‘’,‘’),解密用的函数是AES_DECRYPT(‘’,‘’);
其中这两个函数的第一个参数是你加密的字段名称,第二个参数是这该参数定义的key名称.类似于key-value形式
4,下面是我写的一个小demo
4.1 实体类如下(在数据库中定义相对应的数据表)
在这里插入图片描述
4.2dao层添加数据方法如下

public void addTest(User user) throws SQLException, ClassNotFoundException {
        //连接数据库(连接数据库代码过于简单在这里就省略了);
        Connection con = Db.con();
        String sql = "INSERT INTO ENCRYPT(username,PASSWORD,number) VALUES (?,HEX(AES_ENCRYPT(?,'password')),?)";
        PreparedStatement statement = con.prepareStatement(sql);
        statement.setString(1, user.getUsername());
        statement.setString(2, user.getPassword());
        statement.setString(3, user.getNumber());
        statement.executeUpdate();
    }
备注:其中sql语句中的意思就是:将password字段进行加密,加密的名字是"password"(名字是自定义的),需要记住,解密的时候还需要用到.
运行该方法后数据库中的内容如下所示:


![在这里插入图片描述](https://img-blog.csdnimg.cn/20191021193419593.png)

到这一步加密就成功了.
5.接下来就是进行解密了
在这里我用了查询你方法来进行解密,代码如下:

public User selectUser(String username) throws SQLException, ClassNotFoundException {
User user = null;
Connection con = Db.con();
String sql = “SELECT *,AES_DECRYPT(UNHEX(PASSWORD), ‘password’) FROM ENCRYPT WHERE username=?”;

    PreparedStatement pr = con.prepareStatement(sql);
    pr.setString(1, username);
    ResultSet resultSet = pr.executeQuery();
    while (resultSet.next()) {
        user = new User();
        user.setUsername(resultSet.getString("username"));
        user.setPassword(resultSet.getString("AES_DECRYPT(UNHEX(PASSWORD), 'password')"));
        user.setNumber(resultSet.getString("number"));
    }
    return user;
}
备注:其中sql语句的意思是,查询ENCRYPT 中所有的内容包括解密后的密码,AES_DECRYPT(UNHEX(PASSWORD), 'password') 这段代码的意思是把key(也就是加密时自定义命名的)为passwrod的PASSWORD字段:
进行解密
效果如下:![在这里插入图片描述](https://img-blog.csdnimg.cn/20191021193929278.png)
到这里解密就成功了.

我当时写到这里的时候也碰到了疑问,就是怎么把解密后的密码赋值给password这个字段,答案就是:   user.setPassword(resultSet.getString("AES_DECRYPT(UNHEX(PASSWORD),
直接把解密后的字段名称赋值给password这个字段就行了.
到这里加密解密就全部展示完了,有什么不懂的地方可以评论区留言,大家一块儿进行讨论.
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值