MySQL对称加密

2020-07-06 宋洋葱 宋洋葱 1 min

mysql中对密码一般采取非对称加密,除了密码外业务上有时也需要对部分字段进行对称加密。

常见对称加密算法:

  • AES
  • DES
  • RC4
  • Rabbit
  • TripleDes

常用的编码方式:

  • N进制(N>=2 && N<= 36),只能表示数字类型。
  • baseN(N=[16,32,64]),可表示任意类型。

mysql中可以用conv方法对数字进行转换,如:

select conv(101010,2,10);
select conv(13888888888,10,32);

mysql常用的对称加密方法:

  • aes_encrypt
  • des_encrypt

使用方法

select aes_encrypt("password","key");
select des_encrypt("password","key");

不出意外的话话出现一堆不认识的字符

mysql> select des_encrypt("password","key");
+-------------------------------+
| des_encrypt("password","key") |
+-------------------------------+
| ??bR?G
        8?????=?             |
+-------------------------------+

因为des_encrypt返回的是二进制序列(binary),需要将字节序列编码为字符串(即baseN)才可正常显示。常见的做法是base16或base64。

mysql> SELECT to_base64(aes_encrypt('password','key')); 
mysql> SELECT hex(aes_encrypt('password','key')); 
+------------------------------------+
| hex(aes_encrypt('password','key')) |
+------------------------------------+
| 9BDD7DE3EFED2089E18D6EB20B3C2DA0   |
+------------------------------------+

Comments