AES_ENCRYPT() 使用密钥字符串 key_str 加密字符串 str 并返回包含加密输出的二进制字符串。AES_DECRYPT() 使用密钥字符串 key_str 解密加密字符串 crypt_str 并返回原始明文字符串。如果任一函数参数为 NULL,则该函数返回 NULL。
AES_ENCRYPT(str,key_str[,init_vector])
str 待进行 AES 加密的字符串
key_str 密钥字符串
init_vector 可选的,为需要它的块加密模式提供了一个初始化向量
(1)使用 AES_ENCRYPT 函数用“F3229A0B371ED2D9441B830D21A390C3”密钥字符串加密字符串“hxstrive.com”,然后使用 TO_BASE64 函数将加密结果转换成 BASE64 字符串输出。如下:
mysql> select TO_BASE64(AES_ENCRYPT('hxstrive.com', UNHEX('F3229A0B371ED2D9441B830D21A390C3'))) AS VAL;
+--------------------------+
| VAL |
+--------------------------+
| pmjnVnwQlmyWJytLcCdvGg== |
+--------------------------+
1 row in set (0.04 sec)(2)使用 SHA2 函数来生成密码短语,然后根据密码短语加密字符串“hxstrive.com”,然后使用 TO_BASE64 函数将加密结果转换成 BASE64 字符串输出。如下:
mysql> select TO_BASE64(AES_ENCRYPT('hxstrive.com', UNHEX(SHA2('My secret passphrase', 512)))) AS VAL;
+--------------------------+
| VAL |
+--------------------------+
| qt/C8dcb1IxAqq+qSkhscA== |
+--------------------------+
1 row in set (0.02 sec)(3)通过调用 RANDOM_BYTES(16) 生成用于初始化向量的随机字节串。对于需要初始化向量的加密模式,必须使用相同的向量进行加密和解密。如下:
mysql> SET block_encryption_mode = 'aes-256-cbc';
Query OK, 0 rows affected (0.00 sec)
mysql> SET @key_str = SHA2('My secret passphrase',512);
Query OK, 0 rows affected (0.00 sec)
mysql> SET @init_vector = RANDOM_BYTES(16);
Query OK, 0 rows affected (0.00 sec)
mysql> SET @crypt_str = AES_ENCRYPT('text',@key_str,@init_vector);
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT AES_DECRYPT(@crypt_str,@key_str,@init_vector);
+-----------------------------------------------+
| AES_DECRYPT(@crypt_str,@key_str,@init_vector) |
+-----------------------------------------------+
| text |
+-----------------------------------------------+
1 row in set (0.03 sec)