【学习笔记】mysql 自带aes_encrypt()加密与aes_decrypt()解密及乱码问题解决
由于安全性要求,需要对用户敏感信息进行加密处理。因此使用到了mysql的自带AES加密解密方法。其中使用的秘钥采用的静态常量注入的方式。常量类及常量属性:本次使用的mapper.xml方式,其他方式的话参考sql语句,也是可以达到一样的效果的。插入加密字段:HEX( ) 函数将插入值转换为16进制${ }使用占位符将常量类中的静态常量加入,作为加密秘钥AES_...
由于安全性要求,需要对用户敏感信息进行加密处理。因此使用到了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之路漫漫,不断学习吧!
更多推荐
所有评论(0)