MySQL 加密遇到的问题
应安全部门要求,数据库敏感信息需加密存储
使用 MySQL 提供的 AES_ENCRYPT
和 AES_DECRYPT
进行了加解密
使用方式如下:
1 | # 插入 |
需要注意的地方
密文列的编码方式应选择
latin1
,排序方式使用latin1_german1_ci
查询出现中文乱码时,可以使用
CONVERT (AES_DECRYPT(value, key) USING utf8)
处理1
select CONVERT (AES_DECRYPT(user_name, 'key')USING utf8) as user_name from user_info where id = 1
当密文列的字段类型为
varchar
需要使用HEX()
函数进行转换,且要注意长度,如果长度依旧不够,可使用text
类型存储1
2
3
4
5# 更新
update user_info set user_name = HEX(AES_ENCRYPT(`张三`,'key')) where id = 1;
# 查询
select AES_DECRYPT(UNHEX(CAST(user_name AS CHAR(32000) CHARACTER SET utf8mb4)), 'key') from user_info where id = 1;当密文列字段类型为
text
时,select
查询遇到问题可使用CAST(user_name AS CHAR(20000) CHARACTER SET utf8mb4
来转换类型1
select AES_DECRYPT(CAST(user_name AS CHAR(32000) CHARACTER SET utf8mb4), 'key') from user_info where id = 1;
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mr.Wantの博客!