加密与压缩函数
AES_DECRYPT() 函数
MySQLAES_DECRYPT()函数使用AES加密算法解密一个由AES_ENCRYPT()加密后的字符串。AES_DECRYPT()语法这里是MySQLAES_DECRYPT()函数的语法:AES_DECRYPT(crypt_str,key_str)参数crypt_str必需的。一个要加密的字符
MySQL AES_DECRYPT()
函数使用 AES 加密算法解密一个由 AES_ENCRYPT()
加密后的字符串。
AES_DECRYPT()
语法
这里是 MySQL AES_DECRYPT()
函数的语法:
AES_DECRYPT(crypt_str, key_str)
参数
-
crypt_str
必需的。一个要加密的字符串。
-
key_str
必需的。密钥。
返回值
MySQL AES_DECRYPT()
函数使用指定的密钥 key_str
解密加密的字符串 crypt_str
,并返回解密后的原始明文字符串。
如果任意参数为 NULL
,MySQL AES_DECRYPT()
函数返回 NULL
。
AES_DECRYPT()
示例
要使用 AES_DECRYPT()
解密字符串,请使用如下语句:
SELECT AES_DECRYPT(AES_ENCRYPT('hello', '123456'), '123456');
+-------------------------------------------------------+
| AES_DECRYPT(AES_ENCRYPT('hello', '123456'), '123456') |
+-------------------------------------------------------+
| hello |
+-------------------------------------------------------+
如果任意参数为 NULL
,MySQL AES_DECRYPT()
函数返回 NULL
。
SELECT AES_DECRYPT(NULL, '123456');
+-----------------------------+
| AES_DECRYPT(NULL, '123456') |
+-----------------------------+
| NULL |
+-----------------------------+
AES_ENCRYPT() 函数
MySQLAES_ENCRYPT()函数使用AES加密算法加密一个字符串。AES_ENCRYPT()语法这里是MySQLAES_ENCRYPT()函数的语法:AES_ENCRYPT(str,key_str)参数str必需的。一个要加密的字符串。key_str必需的。密钥。返回值MySQLAES_EN
MySQL AES_ENCRYPT()
函数使用 AES 加密算法加密一个字符串。
AES_ENCRYPT()
语法
这里是 MySQL AES_ENCRYPT()
函数的语法:
AES_ENCRYPT(str, key_str)
参数
-
str
必需的。一个要加密的字符串。
-
key_str
必需的。密钥。
返回值
MySQL AES_ENCRYPT()
函数对指定的字符串 str
使用指定的密钥 key_str
进行 AES 加密,并返回加密后的二进制字符串。
如果被加密的字符串中含有非法数据或者不正确的填充,MySQL AES_ENCRYPT()
函数返回 NULL
。
如果任意参数为 NULL
,MySQL AES_ENCRYPT()
函数返回 NULL
。
AES_ENCRYPT()
示例
要对字符串 hello
使用密钥 123456
使用加密,请使用如下语句:
SELECT AES_ENCRYPT('hello', '123456');
+----------------------------------------------------------------+
| AES_ENCRYPT('hello', '123456') |
+----------------------------------------------------------------+
| 0xC8F20B494C26570BC50BE634407306B4 |
+----------------------------------------------------------------+
这里, mysql client 输出显示的是二进制字符串对应的十六进制的字符串。要禁用显示十六进制,请在登录时使用 --binary-as-hex=false
参数以禁用将二进制内容显示为十六进制。
如果想查看原字符串,请使用 AES_DECRYPT()
函数。
COMPRESS() 函数
MySQLCOMPRESS()函数压缩一个字符串并返回压缩后的二进制字符串。要解压缩COMPRESS()函数压缩后的内容,请使用UNCOMPRESS()函数。COMPRESS()语法这里是MySQLCOMPRESS()函数的语法:COMPRESS(str)参数str必需的。一个要压缩的字符串。返回值
MySQL COMPRESS()
函数压缩一个字符串并返回压缩后的二进制字符串。
要解压缩 COMPRESS()
函数压缩后的内容,请使用 UNCOMPRESS()
函数。
COMPRESS()
语法
这里是 MySQL COMPRESS()
函数的语法:
COMPRESS(str)
参数
-
str
必需的。一个要压缩的字符串。
返回值
MySQL COMPRESS()
函数对指定的字符串 str
进行压缩,并将压缩结果作为二进制字符串返回。
如果参数为 NULL
,MySQL COMPRESS()
函数返回 NULL
。
COMPRESS()
示例
要压缩字符串 hello
,请使用如下语句:
SELECT COMPRESS('hello'), LENGTH(COMPRESS('hello'));
+--------------------------------------+---------------------------+
| COMPRESS('hello') | LENGTH(COMPRESS('hello')) |
+--------------------------------------+---------------------------+
| 0x05000000789CCB48CDC9C90700062C0215 | 17 |
+--------------------------------------+---------------------------+
这里, 输出显示的是二进制字符串对应的十六进制的字符串。要禁用显示十六进制,请在登录时使用 --binary-as-hex=false
参数以禁用将二进制内容显示为十六进制。
这里使用了 LENGTH()
函数展示了压缩后的数据长度。
要压缩空字符串,请使用如下语句:
SELECT COMPRESS(''), LENGTH(COMPRESS(''));
+----------------------------+----------------------+
| COMPRESS('') | LENGTH(COMPRESS('')) |
+----------------------------+----------------------+
| 0x | 0 |
+----------------------------+----------------------+
从上面我们可以看出,很短的字符串压缩后的长度比原始字符串更长。让我们看一个压缩很长字符串的例子。在下面的例子中,我们使用 REPEAT()
函数构造了一个长度为 3000 字符串。
SELECT LENGTH(COMPRESS(REPEAT('abc', 1000)));
+---------------------------------------+
| LENGTH(COMPRESS(REPEAT('abc', 1000))) |
+---------------------------------------+
| 33 |
+---------------------------------------+
这里, REPEAT('abc', 1000)
返回了一个长度为 3000 的字符串,经过 MySQL COMPRESS()
压缩后,长度只有 33。
要计算一个压缩字符串的原始字符串的长度,请使用 UNCOMPRESSED_LENGTH()
函数。
SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('abc', 1000)));
+----------------------------------------------------+
| UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('abc', 1000))) |
+----------------------------------------------------+
| 3000 |
+----------------------------------------------------+
MD5() 函数
MySQLMD5()函数计算一个给定字符串的MD5摘要,并将结果作为一个32位的由十六进制字符组成的字符串返回。MD5()语法这里是MySQLMD5()函数的语法:MD5(str)参数str必需的。一个要计算MD5值的字符串。返回值MySQLMD5()函数返回指定字符串str的MD5摘要,它是一个3
MySQL MD5()
函数计算一个给定字符串的 MD5 摘要,并将结果作为一个 32 位的由十六进制字符组成的字符串返回。
MD5()
语法
这里是 MySQL MD5()
函数的语法:
MD5(str)
参数
-
str
必需的。一个要计算 MD5 值的字符串。
返回值
MySQL MD5()
函数返回指定字符串 str
的 MD5 摘要,它是一个 32 位的由十六进制字符组成的字符串。
如果任意参数为 NULL
,MySQL MD5()
函数返回 NULL
。
MD5()
示例
要计算字符串 hello
的 MD5 摘要,请使用如下语句:
SELECT MD5('hello');
+----------------------------------+
| MD5('hello') |
+----------------------------------+
| 5d41402abc4b2a76b9719d911017c592 |
+----------------------------------+
如果任意参数为 NULL
,MySQL MD5()
函数返回 NULL
。
SELECT MD5(NULL);
+-----------+
| MD5(NULL) |
+-----------+
| NULL |
+-----------+
RANDOM_BYTES() 函数
MySQLRANDOM_BYTES()函数随机生成一个指定长度的的二进制串。RANDOM_BYTES()语法这里是MySQLRANDOM_BYTES()函数的语法:RANDOM_BYTES(len)参数len必需的。一个要计算RANDOM_BYTES值的字符串。返回值MySQLRANDOM_BYTE
MySQL RANDOM_BYTES()
函数随机生成一个指定长度的的二进制串。
RANDOM_BYTES()
语法
这里是 MySQL RANDOM_BYTES()
函数的语法:
RANDOM_BYTES(len)
参数
-
len
必需的。一个要计算 RANDOM_BYTES 值的字符串。
返回值
MySQL RANDOM_BYTES()
函数返回一个长度为 len
的由随机字节产生的字符串。
如果参数 len
为 NULL
,MySQL RANDOM_BYTES()
函数返回 NULL
。
RANDOM_BYTES()
示例
要生成一个长度为 5 的随机二进制字符串,请使用如下语句:
SELECT RANDOM_BYTES(5);
+----------------------------------+
| RANDOM_BYTES(5) |
+----------------------------------+
| 0xD5F4AD1F00 |
+----------------------------------+
注意,由于 RANDOM_BYTES()
返回一个随机字符串,因此,您的结果会不同。
如果任意参数为 NULL
,MySQL RANDOM_BYTES()
函数返回 NULL
。
SELECT RANDOM_BYTES(NULL);
+----------------------------------------+
| RANDOM_BYTES(NULL) |
+----------------------------------------+
| NULL |
+----------------------------------------+
SHA() 函数
MySQLSHA()函数计算并返回给定字符串的SHA-1160位校验和。SHA()函数与MD5()函数类似,也是一种计算摘要的函数。MySQLSHA()函数等效于SHA1()函数。SHA()语法这里是MySQLSHA()函数的语法:SHA(str)参数str必需的。一个要计算SHA-1160位校验和
MySQL SHA()
函数计算并返回给定字符串的 SHA-1 160 位校验和。 SHA()
函数与 MD5()
函数类似,也是一种计算摘要的函数。
MySQL SHA()
函数等效于 SHA1()
函数。
SHA()
语法
这里是 MySQL SHA()
函数的语法:
SHA(str)
参数
-
str
必需的。一个要计算 SHA-1 160 位校验和的字符串。
返回值
MySQL SHA()
函数返回一个 40 位的由十六进制字符组成的字符串,它是指定字符串的 SHA-1 160 位校验和。
如果任意参数为 NULL
,MySQL SHA()
函数返回 NULL
。
SHA()
示例
要计算字符串 hello
的 SHA-1 160 位校验和,请使用如下语句:
SELECT SHA('hello');
+------------------------------------------+
| SHA('hello') |
+------------------------------------------+
| aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d |
+------------------------------------------+
如果任意参数为 NULL
,MySQL SHA()
函数返回 NULL
。
SELECT SHA(NULL);
+-----------+
| SHA(NULL) |
+-----------+
| NULL |
+-----------+
SHA1() 函数
MySQLSHA1()函数计算并返回给定字符串的SHA-1160位校验和。SHA1()函数与MD5()函数类似,也是一种计算摘要的函数。MySQLSHA1()函数等效于SHA()函数。SHA1()语法这里是MySQLSHA1()函数的语法:SHA1(str)参数str必需的。一个要计算SHA-116
MySQL SHA1()
函数计算并返回给定字符串的 SHA-1 160 位校验和。 SHA1()
函数与 MD5()
函数类似,也是一种计算摘要的函数。
MySQL SHA1()
函数等效于 SHA()
函数。
SHA1()
语法
这里是 MySQL SHA1()
函数的语法:
SHA1(str)
参数
-
str
必需的。一个要计算 SHA-1 160 位校验和的字符串。
返回值
MySQL SHA1()
函数返回一个 40 位的由十六进制字符组成的字符串,它是指定字符串的 SHA-1 160 位校验和。
如果任意参数为 NULL
,MySQL SHA1()
函数返回 NULL
。
SHA1()
示例
要计算字符串 hello
的 SHA-1 160 位校验和,请使用如下语句:
SELECT SHA1('hello');
+------------------------------------------+
| SHA1('hello') |
+------------------------------------------+
| aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d |
+------------------------------------------+
如果任意参数为 NULL
,MySQL SHA1()
函数返回 NULL
。
SELECT SHA1(NULL);
+------------+
| SHA1(NULL) |
+------------+
| NULL |
+------------+
SHA2() 函数
MySQLSHA2()函数计算并返回给定字符串的SHA-2摘要,包括:SHA-224,SHA-256,SHA-384,和SHA-512算法。SHA2()函数与MD5()函数类似,也是一种计算摘要的函数。SHA2()语法这里是MySQLSHA2()函数的语法:SHA2(str,hash_length)
MySQL SHA2()
函数计算并返回给定字符串的 SHA-2 摘要,包括: SHA-224, SHA-256, SHA-384, 和 SHA-512 算法。
SHA2()
函数与 MD5()
函数类似,也是一种计算摘要的函数。
SHA2()
语法
这里是 MySQL SHA2()
函数的语法:
SHA2(str, hash_length)
参数
-
str
必需的。一个要计算 SHA-2 校验和的字符串。
-
hash_length
必需的。哈希长度,可用值包括
224
,256
,384
,512
和0
(相当于256
), 分别对应了 SHA-224, SHA-256, SHA-384, 和 SHA-512 算法。
返回值
MySQL SHA2()
函数返回一个由十六进制字符组成的字符串,它是指定字符串的 SHA-2 摘要。
如果任意参数为 NULL
,MySQL SHA2()
函数返回 NULL
。
SHA2()
示例
要计算字符串 hello
的 SHA-224 摘要,请使用如下语句:
SELECT SHA2('hello', 224);
+----------------------------------------------------------+
| SHA2('hello', 224) |
+----------------------------------------------------------+
| ea09ae9cc6768c50fcee903ed054556e5bfc8347907f12598aa24193 |
+----------------------------------------------------------+
要计算字符串 hello
的 SHA-256 摘要,请使用如下语句:
SELECT SHA2('hello', 256);
+------------------------------------------------------------------+
| SHA2('hello', 256) |
+------------------------------------------------------------------+
| 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 |
+------------------------------------------------------------------+
要计算字符串 hello
的 SHA-384 摘要,请使用如下语句:
SELECT SHA2('hello', 384);
+--------------------------------------------------------------------------------------------------+
| SHA2('hello', 384) |
+--------------------------------------------------------------------------------------------------+
| 59e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553bcdb9c666fa90125a3c79f90397bdf5f6a13de828684f |
+--------------------------------------------------------------------------------------------------+
要计算字符串 hello
的 SHA-512 摘要,请使用如下语句:
SELECT SHA2('hello', 512);
+----------------------------------------------------------------------------------------------------------------------------------+
| SHA2('hello', 512) |
+----------------------------------------------------------------------------------------------------------------------------------+
| 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043 |
+----------------------------------------------------------------------------------------------------------------------------------+
如果任意参数为 NULL
,MySQL SHA2()
函数返回 NULL
。
SELECT SHA2(NULL);
+------------+
| SHA2(NULL) |
+------------+
| NULL |
+------------+
STATEMENT_DIGEST() 函数
MySQLSTATEMENT_DIGEST()函数计算以字符串形式给定的SQL语句的语句摘要哈希值并返回。STATEMENT_DIGEST()语法这里是MySQLSTATEMENT_DIGEST()函数的语法:STATEMENT_DIGEST(sql_stmt)参数sql_stmt必需的。一个要计算
MySQL STATEMENT_DIGEST()
函数计算以字符串形式给定的 SQL 语句的语句摘要哈希值并返回。
STATEMENT_DIGEST()
语法
这里是 MySQL STATEMENT_DIGEST()
函数的语法:
STATEMENT_DIGEST(sql_stmt)
参数
-
sql_stmt
必需的。一个要计算语句摘要哈希值的字符串。
返回值
MySQL STATEMENT_DIGEST()
函数返回以字符串形式给定的 SQL 语句的语句摘要哈希值。
如果任意参数为 NULL
,MySQL STATEMENT_DIGEST()
函数返回 NULL
。
STATEMENT_DIGEST()
示例
要计算一个 SQL 语句的语句摘要,请使用如下语句:
SELECT STATEMENT_DIGEST('SELECT * FROM t WHERE a = 1');
+------------------------------------------------------------------+
| STATEMENT_DIGEST('SELECT * FROM t WHERE a = 1') |
+------------------------------------------------------------------+
| 3a0222e56763688b13e212d297c418e14f608bddaa590d0469de5bf0140b0504 |
+------------------------------------------------------------------+
如果任意参数为 NULL
,MySQL STATEMENT_DIGEST()
函数返回 NULL
。
SELECT STATEMENT_DIGEST(NULL);
+------------------------+
| STATEMENT_DIGEST(NULL) |
+------------------------+
| NULL |
+------------------------+
STATEMENT_DIGEST_TEXT() 函数
MySQLSTATEMENT_DIGEST_TEXT()函数返回以字符串形式给定的SQL语句的规范语句摘要。STATEMENT_DIGEST_TEXT()语法这里是MySQLSTATEMENT_DIGEST_TEXT()函数的语法:STATEMENT_DIGEST_TEXT(sql_stmt)参数s
MySQL STATEMENT_DIGEST_TEXT()
函数返回以字符串形式给定的 SQL 语句的规范语句摘要。
STATEMENT_DIGEST_TEXT()
语法
这里是 MySQL STATEMENT_DIGEST_TEXT()
函数的语法:
STATEMENT_DIGEST_TEXT(sql_stmt)
参数
-
sql_stmt
必需的。一个要计算规范语句摘要的字符串。
返回值
MySQL STATEMENT_DIGEST_TEXT()
函数返回以字符串形式给定的 SQL 语句的规范语句摘要。
如果任意参数为 NULL
,MySQL STATEMENT_DIGEST_TEXT()
函数返回 NULL
。
STATEMENT_DIGEST_TEXT()
示例
要计算一个 SQL 语句的语句摘要,请使用如下语句:
SELECT STATEMENT_DIGEST_TEXT('SELECT * FROM t WHERE a = 1');
+------------------------------------------------------+
| STATEMENT_DIGEST_TEXT('SELECT * FROM t WHERE a = 1') |
+------------------------------------------------------+
| SELECT * FROM `t` WHERE `a` = ? |
+------------------------------------------------------+
如果任意参数为 NULL
,MySQL STATEMENT_DIGEST_TEXT()
函数返回 NULL
。
SELECT STATEMENT_DIGEST_TEXT(NULL);
+-----------------------------+
| STATEMENT_DIGEST_TEXT(NULL) |
+-----------------------------+
| NULL |
+-----------------------------+
UNCOMPRESS() 函数
MySQLUNCOMPRESS()函数解压缩COMPRESS()函数压缩后的字符串。UNCOMPRESS()语法这里是MySQLUNCOMPRESS()函数的语法:UNCOMPRESS(str_to_uncompress)参数str_to_uncompress必需的。一个要解压缩的字符串。返回值My
MySQL UNCOMPRESS()
函数解压缩 COMPRESS()
函数压缩后的字符串。
UNCOMPRESS()
语法
这里是 MySQL UNCOMPRESS()
函数的语法:
UNCOMPRESS(str_to_uncompress)
参数
-
str_to_uncompress
必需的。一个要解压缩的字符串。
返回值
MySQL UNCOMPRESS()
函数解压缩指定的字符串 str_to_uncompress
,并将结果作为二进制字符串返回。
如果参数为 NULL
,MySQL UNCOMPRESS()
函数返回 NULL
。
UNCOMPRESS()
示例
要解压缩 COMPRESS()
函数压缩后的字符串,请使用如下语句:
SELECT UNCOMPRESS(COMPRESS('hello'));
+-------------------------------+
| UNCOMPRESS(COMPRESS('hello')) |
+-------------------------------+
| hello |
+-------------------------------+
注意, mysql client 输出显示的是二进制字符串对应的十六进制的字符串。要显示原始字符串,请在登录时使用 --binary-as-hex=false
参数以禁用将二进制内容显示为十六进制。
如果参数为 NULL
,MySQL UNCOMPRESS()
函数返回 NULL
。
SELECT UNCOMPRESS(NULL);
+------------------+
| UNCOMPRESS(NULL) |
+------------------+
| NULL |
+------------------+
UNCOMPRESSED_LENGTH() 函数
MySQLUNCOMPRESSED_LENGTH()函数返回一个压缩的字符串的原始字符串的长度。UNCOMPRESSED_LENGTH()语法这里是MySQLUNCOMPRESSED_LENGTH()函数的语法:UNCOMPRESSED_LENGTH(compressed_str)参数compres
MySQL UNCOMPRESSED_LENGTH()
函数返回一个压缩的字符串的原始字符串的长度。
UNCOMPRESSED_LENGTH()
语法
这里是 MySQL UNCOMPRESSED_LENGTH()
函数的语法:
UNCOMPRESSED_LENGTH(compressed_str)
参数
-
compressed_str
必需的。一个使用
COMPRESS()
函数压缩后的字符串。
返回值
MySQL UNCOMPRESSED_LENGTH()
函数返回一个压缩的字符串的原始字符串的长度。
如果参数为 NULL
,MySQL UNCOMPRESSED_LENGTH()
函数返回 NULL
。
UNCOMPRESSED_LENGTH()
示例
要返回使用 COMPRESS()
函数压缩的字符串的原始字符串的长度,请使用如下语句:
set @compressed = COMPRESS('hello');
SELECT UNCOMPRESSED_LENGTH(@compressed);
+----------------------------------+
| UNCOMPRESSED_LENGTH(@compressed) |
+----------------------------------+
| 5 |
+----------------------------------+