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

 更新时间:2023年12月22日 08:30:39   作者:小贤java  
这篇文章主要给大家介绍了关于MYSQL加密和压缩函数详解以及实战的相关资料,加密函数主要用来对数据进行加密和界面处理,以保证某些重要数据不被别人获取,文中通过代码介绍的非常详细,需要的朋友可以参考下

MySQL提供了多种加密和压缩方式,可以帮助保护数据库中的敏感数据。以下是一些常见的MySQL加密和压缩方法参考:

一、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:必需的。哈希长度,可用值包括 224256384512 和 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加密和压缩函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • mysql如何让自增id归0解决方案

    mysql如何让自增id归0解决方案

    数据库的Id自增越来越大,要让自增重新从1开始:那么就用下面的方法吧
    2012-11-11
  • Mybatis中的动态SQL语句解析

    Mybatis中的动态SQL语句解析

    这篇文章主要介绍了Mybatis中的动态SQL语句解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 使用MySQL生成最近24小时整点时间临时表

    使用MySQL生成最近24小时整点时间临时表

    MySQL临时表是一种只存在于当前数据库连接或会话期间的表,它们可以被用来存储临时数据,这些数据可以在查询中被使用,但是它们不会在数据库中永久存储,这篇文章主要给大家介绍了关于如何使用MySQL生成最近24小时整点时间临时表的相关资料,需要的朋友可以参考下
    2024-01-01
  • Mysql  DATEDIFF函数用法总结示例详解

    Mysql  DATEDIFF函数用法总结示例详解

    MySQL DATEDIFF()函数是MySQL中常见的日期函数之一,它主要用于计算两个日期之间的差值,单位可以是天、周、月、季度和年,DATEDIFF函数用于返回两个日期的天数,这篇文章主要介绍了Mysql  DATEDIFF函数,包括语法格式和示例代码讲解,需要的朋友可以参考下
    2023-03-03
  • MySQL Union合并查询数据及表别名、字段别名用法分析

    MySQL Union合并查询数据及表别名、字段别名用法分析

    这篇文章主要介绍了MySQL Union合并查询数据及表别名、字段别名用法,结合实例形式较为详细的分析了mysql使用Union合并连接查询数据以及使用as实现表别名与字段别名操作,需要的朋友可以参考下
    2018-06-06
  • Redis与MySQL的双写一致性问题

    Redis与MySQL的双写一致性问题

    这篇文章只要介绍了Redis与MySQL双写一致性,主要是指在使用缓存和数据库同时存储数据的场景下( 主要是存在高并发的情况),如何保证两者的数据一致性(内容相同或者尽可能接近),感兴趣的同学可以借鉴一下
    2023-03-03
  • 数据库的用户帐号管理基础知识

    数据库的用户帐号管理基础知识

    数据库的用户帐号管理基础知识...
    2006-11-11
  • 在Linux系统安装MySql步骤截图详解

    在Linux系统安装MySql步骤截图详解

    本文给大家介绍的是linux系统下使用官方编译好的二进制文件进行安装MySql的安装过程和安装截屏,这种安装方式速度快,安装步骤简单。需要的朋友可以参考下在Linux系统安装MySql步骤截图详解
    2016-10-10
  • Mysql的DQL查询操作全面分析讲解

    Mysql的DQL查询操作全面分析讲解

    DQL(Data Query Language 数据查询语言):用于查询数据库对象中所包含的数据。DQL语言主要的语句:SELECT语句。DQL语言是数据库语言中最核心、最重要的语句,也是使用频率最高的语句
    2022-12-12
  • DELETE、TRUNCATE 和 DROP 在MySQL中的区别及功能使用示例

    DELETE、TRUNCATE 和 DROP 在MySQL中的区别及功能使用示例

    在MySQL数据库中,DELETE、TRUNCATE TABLE 和 DROP 这三个命令分别适用于不同的数据删除需求,它们在工作原理、应用场景以及特性上有所区别,这篇文章主要介绍了DELETE、TRUNCATE 和 DROP 在MySQL中的区别及功能使用示例,需要的朋友可以参考下
    2024-03-03

最新评论