mysql基于AES_ENCRYPT&&AES_DECRYPT实现密码的加密与解密

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')

2.5 结果

你可能感兴趣的:(mysql,数据库)