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

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

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

常量类及常量属性:

【学习笔记】mysql 自带aes_encrypt()加密与aes_decrypt()解密及乱码问题解决_第1张图片

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

插入加密字段:

【学习笔记】mysql 自带aes_encrypt()加密与aes_decrypt()解密及乱码问题解决_第2张图片

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

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

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

插入结果如下:

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

查询并解密加密字段:

【学习笔记】mysql 自带aes_encrypt()加密与aes_decrypt()解密及乱码问题解决_第3张图片

UNHEX ( ) 解析16进制

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

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

查询结果:

【学习笔记】mysql 自带aes_encrypt()加密与aes_decrypt()解密及乱码问题解决_第4张图片

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

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

【学习笔记】mysql 自带aes_encrypt()加密与aes_decrypt()解密及乱码问题解决_第5张图片

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

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

解决方法:

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

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

【学习笔记】mysql 自带aes_encrypt()加密与aes_decrypt()解密及乱码问题解决_第6张图片

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

【学习笔记】mysql 自带aes_encrypt()加密与aes_decrypt()解密及乱码问题解决_第7张图片

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

你可能感兴趣的:(学习笔记)