1.直接使用AES_ENCRYPT&&AES_DECRYPT函数导致的问题。
执行语句
select AES_ENCRYPT('cd123','key')
结果 加密过后的字符串是一串很奇怪的字符。
尝试使用上面加密过后的字符解密。
select AES_DECRYPT('Äu5£dö|#餹','key')
结果 并未成功的解密
2.解决办法
使用 hex() 和 unhex()处理密码。
2.1 hex()与unhex()函数
hex():将一个字符串或数字转换为十六进制格式的字符串。
unhex():把十六进制格式的字符串转化为原来的格式。每对十六进制数字转化为一个字符。执行hex(str)的逆运算。即,它将参数中的每对十六进制数字解释为一个数字,并将其转换为该数字表示的字符。结果字符将作为二进制字符串返回。参数字符串中的字符必须为合法的十六进制数字:“ 0” ..“ 9”,“ A” ..“ F”,“ a” ..“ f”。如果UNHEX在参数中遇到任何非十六进制数字,则返回NULL。
2.2 加密SQL
select hex(AES_ENCRYPT('cd123','key'))
2.3 结果
如此加密可以直接使用varchar类型直接存储。
2.4 解密SQL
SELECT AES_DECRYPT(UNHEX('C4753517A364960F83F67C7F23E9A4B9'),'key')