Mysql教程

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。


关注微信获取最新动态