【学习笔记】mysql 自带aes_encrypt()加密与aes_decrypt()解密及乱码问题解决

由于安全性要求,需要对用户敏感信息进行加密处理。因此使用到了mysql的自带AES加密解密方法。

其中使用的秘钥采用的静态常量注入的方式。

常量类及常量属性:

本次使用的mapper.xml方式,其他方式的话参考sql语句,也是可以达到一样的效果的。

插入加密字段:

HEX( ) 函数将插入值转换为16进制

${ }使用占位符将常量类中的静态常量加入,作为加密秘钥

AES_ENCRYPT ( )函数为mysql自带的加密函数

插入结果如下:

        其中插入部分字段为:江苏-苏州-虎丘区

查询并解密加密字段:

UNHEX ( ) 解析16进制

AES_DECRYPT( )函数为mysql自带的解密函数

${ }使用占位符将常量类中的静态常量加入,作为秘钥

查询结果:

可以看到在数据库查询已经可以正确解析加密字符。

按理说到这一步,已经大功告成,但是还是出现了意想不到的情况。如下:经过java解析时,还是出现了字符乱码的情况

通过查资料,查博客终于解决了问题,实名制感谢这位老哥,他的学习方法值得我学习。

https://blog.csdn.net/tiancao222/article/details/85699796#commentBox

解决方法:

  • 首先mysql的数据库的编码格式不能是utf8,需要是utf8mb4才行。

  • 其次在查询的时候,使用cast( )函数将查询字段作为一个整体查询。具体如下:

这样的话 查询出来就不是乱码了

最后还是觉得自己的解决问题的方法还是需要提升,IT之路漫漫,不断学习吧!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值