13.7加密函数
加密函数是MySQL中用来对数据进行加密的函数。因为数据库中有些很敏感的信息不希望被其他人看到,就应该通过加密的方式来使这些数据变成看似乱码的数据。例如用户的密码,就应该经过加密。本小节将详细讲解加密函数的作用和使用方法。 下面是各种加密函数的名称、作用和使用方法。
13.7.1 加密函数PASSWORD(str)
PASSWORD(str)函数可以对字符串str进行加密。一般情况下,PASSWORD(str)的函数主要是用来给用户的密码加密的。
【示例13-59】下面使用PASSWORD(str)的函数为字符串'abcd'加密。
mysql> SELECT PASSWORD('abcd'); +-------------------------------------------+ | PASSWORD('abcd') | +-------------------------------------------+ | *A154C52565E9E7F94BFC08A1FE702624ED8EFFDA | +-------------------------------------------+ 1 row in set (0.00 sec)
结果显示,字符串'abcd'加密后的结果是"*A154C52565E9E7F94BFC08A1FE702624ED8EFFDA" PASSWORD(str)函数加密是不可逆的。
技巧:PASSWORD(str)函数经常用来给密码加密。MySQL用户需要设置密码,用户不能将未加密的密码直接存储到MySQL的肥user表中。因为登录MySQL数据库时, 数据库系统会将你输入的密码先通过PASSWORD(str)的函数加密,然后与数据库中的密码进行比较,匹配成功后才可以登录。
13.7.2 加密函数MD5(str)
MD5(str)的函数可以对字符串str进行加密。MD5(str)的函数主要对普通的数据进行加密。
【示例13-60】下面使用MD5(str)的函数为字符串'abcd'加密。
mysql> SELECT MD5('abcd'); +----------------------------------+ | MD5('abcd') | +----------------------------------+ | e2fc714c4727ee9395f324cd2e7f331f | +----------------------------------+ 1 row in set (0.04 sec)
结果显示,字符串abcd的 MD5 值为 e2fc714c4727ee9395f324cd2e7f331f。
13.7.3 加密函数ENCODE(str,pswd_str)
ENCODE(str,pswd_str)函数可以使用字符串pswd_str来加密字符串str。加密的结果是一个二进制数,必须使用BLOB类型的字段来保存它。
【示例13-61】下面使用字符串'aa'来加密字符串'abcd',将加密后的数据存入表b的code字段中。code字段是BLOB类型的。
mysql> INSERT INTO b VALUES(ENCODE('abcD','aa')); Query OK, 1 row affected (0.00 sec) //从表b査询数据 mysql>SELECT.FROMb; mysql>SELECT * FROM b; |+------+ | code | |+------+ | -| 蠻 | |+------+ 1 row in set (0.00 sec)
结果显示,字符串abcd加密后的数据为"-| 蠻"。
13.7.4解密函数DECODE(crypt_str,pswd_str)
DECODE(crypt_str,pswd_str)函数可以使用字符串pswd_str来为crypt_str解密。crypt__str 是通过ENCODE(str,pswd_str)加密后的二进制数据。字符串pswd_str应该与加密时的字符 串pswd_str是相同的。
【示例 13-62】下面使用 DECODE(crypt_str,pswd_str)为ENCODE(str,pswd_str)加密的数据解密。
mysql> SELECT DECODE(ENCODE('abcd','aa'),'aa'); +----------------------------------+ | DECODE(ENCODE('abcd','aa'),'aa') | +----------------------------------+ | abcd | +----------------------------------+ 1 row in set (0.01 sec)
结果显示,先将字符串abcd加密,然后再用DECODE(crypt_str,pswd_str)的函数解密.解密后的字符串依然是abcd。