MySQL提供了多种加密和压缩方式,可以帮助保护数据库中的敏感数据。以下是一些常见的MySQL加密和压缩方法参考:
建议收藏以备后续用到查阅参考。
目录
一、AES_ENCRYPT AES加密
二、AES_DECRYPT AES解密
三、COMPRESS 压缩字符串
四、UNCOMPRESS 解压COMPRESS压缩字符串
五、UNCOMPRESSED_LENGTH 取压缩字符串的原始字符串的长度
六、MD5 md5加密
七、RANDOM_BYTES 随机生成指定长度字符串
八、SHA 字符串的SHA-1 160 位校验和
九、SHA1 字符串的SHA-1 160 位校验和
十、SHA2 给定字符串的 SHA-2 摘要
十一、STATEMENT_DIGEST 取SQL的哈希值
十二、STATEMENT_DIGEST_TEXT 取SQL的规范语句摘要
MySQL AES_ENCRYPT()
函数使用 AES 加密算法加密一个字符串。
语法:
SELECT AES_ENCRYPT(str, key_str)
参数说:
str
:必需的。一个要加密的字符串。
key_str
:必需的。密钥。
返回值:
NULL情况:
任意参数为 NULL。
示例:
mysql> SELECT AES_ENCRYPT('hello', '123456'), AES_ENCRYPT(null, '123456'), AES_ENCRYPT('hello', NULL);
+--------------------------------+-----------------------------+----------------------------+
| AES_ENCRYPT('hello', '123456') | AES_ENCRYPT(null, '123456') | AES_ENCRYPT('hello', NULL) |
+--------------------------------+-----------------------------+----------------------------+
| ÈòIL&WÅæ4@s´ | NULL | NULL |
+--------------------------------+-----------------------------+----------------------------+
1 row in set (0.00 sec)
MySQL AES_DECRYPT() 函数使用 AES 加密算法解密一个由 AES_ENCRYPT() 加密后的字符串。
语法:
SELECT AES_DECRYPT(crypt_str, key_str)
参数说明:
crypt_str:
必需的。一个要加密的字符串。key_str
:必需的。密钥。返回值:
NULL情况:
任意参数为 NULL。
示例:
SELECT
AES_DECRYPT(AES_ENCRYPT('hello', 'abcde'), 'abcde'), // hello
AES_DECRYPT(AES_ENCRYPT('hello', 'abcde'), null); // NULL
MySQL COMPRESS() 函数压缩一个字符串并返回压缩后的二进制字符串。
要解压缩 COMPRESS() 函数压缩后的内容,请使用 UNCOMPRESS() 函数。
语法:
COMPRESS(str)
参数说明:
str:
必需的。一个要压缩的字符串。
返回值:
NULL情况:
参数为 NULL。
示例:
mysql> SELECT COMPRESS('hello'), LENGTH(COMPRESS('hello')),COMPRESS(''),LENGTH(COMPRESS(''));
+-------------------+---------------------------+--------------+----------------------+
| COMPRESS('hello') | LENGTH(COMPRESS('hello')) | COMPRESS('') | LENGTH(COMPRESS('')) |
+-------------------+---------------------------+--------------+----------------------+
| x??H??? , | 17 | | 0 |
+-------------------+---------------------------+--------------+----------------------+
看似压缩后的字符串比原字符串还要长。
下面用函数REPEAT 函数来生成指定长度的字符串再压缩看。
mysql> SELECT LENGTH(REPEAT('abc', 1000)), LENGTH(COMPRESS(REPEAT('abc', 1000)));
+-----------------------------+---------------------------------------+
| LENGTH(REPEAT('abc', 1000)) | LENGTH(COMPRESS(REPEAT('abc', 1000))) |
+-----------------------------+---------------------------------------+
| 3000 | 33 |
+-----------------------------+---------------------------------------+
压缩效果:3000长度的字符串压缩后长度为33
MySQL UNCOMPRESS() 函数解压缩 COMPRESS() 函数压缩后的字符串。
语法:
UNCOMPRESS(str_to_uncompress)
参数说明:
str_to_uncompress
:必需的。一个要解压缩的字符串。
返回值:
str_to_uncompress
,并将结果作为二进制字符串返回。NULL情况:
参数为 NULL。
示例:
mysql> SELECT UNCOMPRESS(COMPRESS('abcdefghjiklmnopqrstuvwxtz')),COMPRESS('abcdefghjiklmnopqrstuvwxtz');
+----------------------------------------------------+----------------------------------------+
| UNCOMPRESS(COMPRESS('abcdefghjiklmnopqrstuvwxtz')) | COMPRESS('abcdefghjiklmnopqrstuvwxtz') |
+----------------------------------------------------+----------------------------------------+
| abcdefghjiklmnopqrstuvwxtz | x?KLJNIMK????????/(,*.)-+?(? ?} |
+----------------------------------------------------+----------------------------------------+
MySQL UNCOMPRESSED_LENGTH()
函数返回一个压缩的字符串的原始字符串的长度。
语法:
UNCOMPRESSED_LENGTH(compressed_str)
参数说明:
返回值:
NULL情况:参数为NULL。
示例:
mysql> SELECT UNCOMPRESSED_LENGTH(COMPRESS('abcdefghjiklmnopqrstuvwxtz')),COMPRESS('abcdefghjiklmnopqrstuvwxtz');
+-------------------------------------------------------------+----------------------------------------+
| UNCOMPRESSED_LENGTH(COMPRESS('abcdefghjiklmnopqrstuvwxtz')) | COMPRESS('abcdefghjiklmnopqrstuvwxtz') |
+-------------------------------------------------------------+----------------------------------------+
| 26 | x?KLJNIMK????????/(,*.)-+?(? ?} |
+-------------------------------------------------------------+----------------------------------------+
MySQL MD5()
函数计算一个给定字符串的 MD5 摘要,并将结果作为一个 32 位的由十六进制字符组成的字符串返回。
语法:
MD5(str)
参数说明:
str
:必需的。一个要计算 MD5 值的字符串。返回值:
NULL情况:参数为
NULL。
示例:
mysql> SELECT MD5('abc');
+----------------------------------+
| MD5('abc') |
+----------------------------------+
| 900150983cd24fb0d6963f7d28e17f72 |
+----------------------------------+
MySQL RANDOM_BYTES()
函数随机生成一个指定长度的的二进制串。
语法:
RANDOM_BYTES(len)
参数说明:
len
:必需的。一个要计算 RANDOM_BYTES 值的字符串。返回值:
len
的由随机字节产生的字符串。NULL情况:
参数 len
为 NULL。
示例:
mysql> SELECT RANDOM_BYTES(10),LENGTH(RANDOM_BYTES(10)),RANDOM_BYTES(NULL);
+------------------+--------------------------+--------------------+
| RANDOM_BYTES(10) | LENGTH(RANDOM_BYTES(10)) | RANDOM_BYTES(NULL) |
+------------------+--------------------------+--------------------+
| ?m ?? | 10 | NULL |
+------------------+--------------------------+--------------------+
MySQL SHA() 函数计算并返回给定字符串的 SHA-1 160 位校验和。 SHA() 函数与 MD5() 函数类似,也是一种计算摘要的函数。
MySQL SHA() 函数等效于 SHA1() 函数。
语法:
SHA(str)
参数说明:
str
:必需的。一个要计算 SHA-1 160 位校验和的字符串。
返回值:
NULL情况:参数为NULL。
示例:
mysql> SELECT SHA('hello'),SHA(NULL);
+------------------------------------------+-----------+
| SHA('hello') | SHA(NULL) |
+------------------------------------------+-----------+
| aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d | NULL |
+------------------------------------------+-----------+
MySQL SHA1() 函数计算并返回给定字符串的 SHA-1 160 位校验和。 SHA1() 函数与 MD5() 函数类似,也是一种计算摘要的函数。
MySQL SHA1() 函数等效于 SHA() 函数。
MySQL SHA2() 函数计算并返回给定字符串的 SHA-2 摘要,包括: SHA-224, SHA-256, SHA-384, 和 SHA-512 算法。
SHA2() 函数与 MD5() 函数类似,也是一种计算摘要的函数。
语法:
SHA2(str, hash_length)
参数说明:
str
:必需的。一个要计算 SHA-2 校验和的字符串。hash_length
:必需的。哈希长度,可用值包括 224
, 256
, 384
, 512
和 0
(相当于 256
), 分别对应了 SHA-224, SHA-256, SHA-384, 和 SHA-512 算法。返回值:
示例:
mysql> SELECT SHA2('hello', 224),SHA2(NULL, 1);
+----------------------------------------------------------+---------------+
| SHA2('hello', 224) | SHA2(NULL, 1) |
+----------------------------------------------------------+---------------+
| ea09ae9cc6768c50fcee903ed054556e5bfc8347907f12598aa24193 | NULL |
+----------------------------------------------------------+---------------+
MySQL STATEMENT_DIGEST() 函数计算以字符串形式给定的 SQL 语句的语句摘要哈希值并返回。
语法:
STATEMENT_DIGEST(sql_stmt)
参数说明:
返回值:
示例:
mysql> SELECT STATEMENT_DIGEST('SELECT 1'),STATEMENT_DIGEST(NULL);
+------------------------------------------------------------------+------------------------+
| STATEMENT_DIGEST('SELECT 1') | STATEMENT_DIGEST(NULL) |
+------------------------------------------------------------------+------------------------+
| d1b44b0c19af710b5a679907e284acd2ddc285201794bc69a2389d77baedddae | NULL |
+------------------------------------------------------------------+------------------------+
MySQL STATEMENT_DIGEST_TEXT()
函数返回以字符串形式给定的 SQL 语句的规范语句摘要。
语法:
STATEMENT_DIGEST_TEXT(sql_stmt)
参数说明:
sql_stmt
:必需的。一个要计算规范语句摘要的字符串。
返回值:
NULL情况:
任意参数为 NULL。
示例:
mysql> SELECT STATEMENT_DIGEST_TEXT('SELECT * FROM t WHERE a = 1'),STATEMENT_DIGEST_TEXT(NULL);
+------------------------------------------------------+-----------------------------+
| STATEMENT_DIGEST_TEXT('SELECT * FROM t WHERE a = 1') | STATEMENT_DIGEST_TEXT(NULL) |
+------------------------------------------------------+-----------------------------+
| SELECT * FROM `t` WHERE `a` = ? | NULL |
+------------------------------------------------------+-----------------------------+