主页 > 电脑硬件  > 

MYSQL加密和压缩函数详解和实战(含示例)

MYSQL加密和压缩函数详解和实战(含示例)

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的规范语句摘要


一、AES_ENCRYPT AES加密

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) 二、AES_DECRYPT AES解密

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 三、COMPRESS 压缩字符串

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

四、UNCOMPRESS 解压COMPRESS压缩字符串

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????????/(,*.)-+?(? ?} | +----------------------------------------------------+----------------------------------------+ 五、UNCOMPRESSED_LENGTH 取压缩字符串的原始字符串的长度

MySQL UNCOMPRESSED_LENGTH() 函数返回一个压缩的字符串的原始字符串的长度。

语法:

UNCOMPRESSED_LENGTH(compressed_str)

参数说明:

compressed_str:必需的。一个使用 COMPRESS() 函数压缩后的字符串。

返回值:

一个压缩的字符串的原始字符串的长度。返回 NULL情况:参数为NULL。

示例:

mysql> SELECT UNCOMPRESSED_LENGTH(COMPRESS('abcdefghjiklmnopqrstuvwxtz')),COMPRESS('abcdefghjiklmnopqrstuvwxtz'); +-------------------------------------------------------------+----------------------------------------+ | UNCOMPRESSED_LENGTH(COMPRESS('abcdefghjiklmnopqrstuvwxtz')) | COMPRESS('abcdefghjiklmnopqrstuvwxtz') | +-------------------------------------------------------------+----------------------------------------+ | 26 | x?KLJNIMK????????/(,*.)-+?(? ?} | +-------------------------------------------------------------+----------------------------------------+ 六、MD5 md5加密

MySQL MD5() 函数计算一个给定字符串的 MD5 摘要,并将结果作为一个 32 位的由十六进制字符组成的字符串返回。

语法:

MD5(str)

参数说明:

str:必需的。一个要计算 MD5 值的字符串。

返回值:

32 位的由十六进制字符组成的字符串。返回 NULL情况:参数为 NULL。

示例:

mysql> SELECT MD5('abc'); +----------------------------------+ | MD5('abc') | +----------------------------------+ | 900150983cd24fb0d6963f7d28e17f72 | +----------------------------------+ 七、RANDOM_BYTES 随机生成指定长度字符串

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 | +------------------+--------------------------+--------------------+ 八、SHA 字符串的SHA-1 160 位校验和

MySQL SHA() 函数计算并返回给定字符串的 SHA-1 160 位校验和。 SHA() 函数与 MD5() 函数类似,也是一种计算摘要的函数。 MySQL SHA() 函数等效于 SHA1() 函数。

语法:

SHA(str)

参数说明:

str:必需的。一个要计算 SHA-1 160 位校验和的字符串。

返回值:

指定字符串的 SHA-1 160 位校验和。(40 位的由十六进制字符组成的字符串)返回 NULL情况:参数为NULL。

示例:

mysql> SELECT SHA('hello'),SHA(NULL); +------------------------------------------+-----------+ | SHA('hello') | SHA(NULL) | +------------------------------------------+-----------+ | aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d | NULL | +------------------------------------------+-----------+ 九、SHA1 字符串的SHA-1 160 位校验和

MySQL SHA1() 函数计算并返回给定字符串的 SHA-1 160 位校验和。 SHA1() 函数与 MD5() 函数类似,也是一种计算摘要的函数。 MySQL SHA1() 函数等效于 SHA() 函数。

十、SHA2 给定字符串的 SHA-2 摘要

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 算法。

返回值:

一个由十六进制字符组成的字符串,它是指定字符串的 SHA-2 摘要。

示例:

mysql> SELECT SHA2('hello', 224),SHA2(NULL, 1); +----------------------------------------------------------+---------------+ | SHA2('hello', 224) | SHA2(NULL, 1) | +----------------------------------------------------------+---------------+ | ea09ae9cc6768c50fcee903ed054556e5bfc8347907f12598aa24193 | NULL | +----------------------------------------------------------+---------------+ 十一、STATEMENT_DIGEST 取SQL的哈希值

MySQL STATEMENT_DIGEST() 函数计算以字符串形式给定的 SQL 语句的语句摘要哈希值并返回。

语法:

STATEMENT_DIGEST(sql_stmt)

参数说明:

sql_stmt:必需的。一个要计算语句摘要哈希值的字符串。

返回值:

以字符串形式给定的 SQL 语句的语句摘要哈希值。

示例:

mysql> SELECT STATEMENT_DIGEST('SELECT 1'),STATEMENT_DIGEST(NULL); +------------------------------------------------------------------+------------------------+ | STATEMENT_DIGEST('SELECT 1') | STATEMENT_DIGEST(NULL) | +------------------------------------------------------------------+------------------------+ | d1b44b0c19af710b5a679907e284acd2ddc285201794bc69a2389d77baedddae | NULL | +------------------------------------------------------------------+------------------------+ 十二、STATEMENT_DIGEST_TEXT 取SQL的规范语句摘要

MySQL STATEMENT_DIGEST_TEXT() 函数返回以字符串形式给定的 SQL 语句的规范语句摘要。

语法:

STATEMENT_DIGEST_TEXT(sql_stmt)

参数说明:

sql_stmt:必需的。一个要计算规范语句摘要的字符串。

返回值:

SQL 语句的规范语句摘要。返回 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 | +------------------------------------------------------+-----------------------------+

标签:

MYSQL加密和压缩函数详解和实战(含示例)由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“MYSQL加密和压缩函数详解和实战(含示例)