如何在MySQL中正确解密AES加密且BASE64编码存储的值
解密失败原因
AES_DECRYPT 函数执行后返回的是二进制字节流,直接查询不会自动转为人类可读的字符串,看起来就像解密失败。
正确解密语句
你可以任选以下一种写法实现正常解密:
- 使用
CAST函数做类型转换
SELECT CAST(AES_DECRYPT(FROM_BASE64(randomname), 'ENCRYPTIONKEY') AS CHAR CHARSET utf8mb4) AS decrypted_name FROM user;
- 使用
CONVERT函数做字符集转换
SELECT CONVERT(AES_DECRYPT(FROM_BASE64(randomname), 'ENCRYPTIONKEY') USING utf8mb4) AS decrypted_name FROM user;
额外注意事项
- 加密和解密时使用的密钥
ENCRYPTIONKEY必须完全一致,大小写、空格、特殊字符都不能有差异 - 转换字符集时如果你的明文使用的是其他字符集,把语句中的
utf8mb4替换为对应字符集即可,通用场景下utf8mb4兼容性最好 - 你当前表中的
randomname字段类型为varchar(64),足够存储短文本加密后Base64编码的结果,无需调整字段结构
内容的提问来源于stack exchange,提问作者Harshit Vijayvargia
相关产品推荐
相关产品推荐

