当前位置: 首页 > news >正文

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'),    // helloAES_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加密和压缩方法参考: 建议收藏以备后续用到查阅参考。 目录 一、AES_ENCRYPT AES加密 二、AES_DECRYPT AES解密 三、COMPRESS 压缩字符串 四、UNCOMPRESS 解压…...

redis Redis::geoAdd 无效,phpstudy 如何升级redis版本

redis 查看当前版本命令 INFO SERVERwindows 版redis 进入下载 geoadd 功能在3.2之后才有的,但是phpstudy提供的最新的版本也是在3.0,所以需要升级下 所以想出一个 挂狗头,卖羊肉的方法,下载windows 的程序,直接替…...

2024重庆大学计算机考研分析

24计算机考研|上岸指南 重庆大学 重庆大学计算机考研招生学院是计算机学院和大数据与软件学院。目前均已出拟录取名单。 重庆大学计算机学院是我国高校最早开展计算机研究的基地之一,1978年和1986年获西南地区首个硕士和博士点,1998年成立计算机学院&a…...

二、Lua数据类型

文章目录 一、数据类型nil二、数据类型boolean三、数据类型number四、数据类型String(一)用单引号或双引号:(二)可以包含换行的字符串(三)字符串与数字做数学运算时,优先将字符串转换…...

Grabcut算法在图片分割中的应用

GrabCut算法原理 Grabcut是基于图割(graph cut)实现的图像分割算法,它需要用户输入一个bounding box作为分割目标位置,实现对目标与背景的分离/分割,与KMeans与MeanShift等图像分割方法不同。 Grabcut分割速度快,效果好&#xff0…...

常用的Linux的指令

目录 常用指令 1、文件和目录操作: 2、文件查看和编辑 3、系统信息 4、进程管理 5、用户和权限 6、网络操作 7、压缩和解压 8、软件包管理 常用指令 1、文件和目录操作: ls:列出目录内容 cd: 切换目录 pwd:显…...

【STM32】GPIO输出

1 GPIO简介 (1)GPIO(General Purpose Input Output)通用输入输出口 (2)可配置为8种输入输出模式 (3)引脚电平:0V~3.3V,部分引脚可容忍5V(可以输…...

【Go语言从入门到实战】反射编程、Unsafe篇

反射编程 reflect.TypeOf vs reflect.ValueOf func TestTypeAndValue(t *testing.T) {var a int64 10t.Log(reflect.TypeOf(a), reflect.ValueOf(a))t.Log(reflect.ValueOf(a).Type()) }判断类型 - Kind() 当我们需要对反射回来的类型做判断时,Go 语言内置了一个…...

vue实现对话框指定某个对话内容的滚动到指定位置(滚动到可视区域的中间位置)

1、使用el-scrollbar实现定位滚动&#xff08;elementui组件库&#xff09; 如何滚动&#xff1a;参考链接 比如说指定某条对话内容滚动到可视区域的中间 html结构&#xff1a; <div class"chat-list" id"chat-list"><el-scrollbar ref"scro…...

【RTP】2:RtpPacket、RtpPacketToSend 创建、修改的简要分析

【RTP】1: RTPSenderAudio::SendAudio继续对如何做修改,比如修改扩展 做分析。查找扩展 一个已知的已经在packet中存在的扩展bool RtpPacket::IsExtensionReserved(ExtensionType type) const {uint8_t id = extensions_.GetId(type);...

汽车租聘管理与推荐系统Python+Django网页界面+协同过滤推荐算法

一、介绍 汽车租聘管理与推荐系统。本系统使用Python作为主要编程语言&#xff0c;前端采用HTML、CSS、BootStrap等技术搭建前端界面&#xff0c;后端采用Django框架处理用户的请求。创新点&#xff1a;使用协同过滤推荐算法实现对当前用户个性化推荐。 其主要功能如下&#x…...

qt pdf 模块简介

文章目录 1. 技术平台2. Qt pdf 模块3. cmake 使用模块4. 许可证5. 简单示例5.1 CMakeLists.txt5.2 main.cpp 6. 总结 1. 技术平台 项目说明OSwin10 x64Qt6.6compilermsvc2022构建工具cmake 2. Qt pdf 模块 Qt PDF模块包含用于呈现PDF文档的类和函数。 QPdfDocument 类加载P…...

Spring Boot WebSocket 客户端

介绍 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议&#xff0c;它可以提供实时的、双向的数据传输。Spring Boot 提供了对 WebSocket 的支持&#xff0c;我们可以使用 Spring Boot WebSocket 客户端来连接到 WebSocket 服务器&#xff0c;并进行实时通信。 本文将…...

第五题-kotori和素因子【第六届传智杯程序设计挑战赛解题分析详解复盘】(JavaPythonC++实现)

🚀 欢迎来到 ACM 算法题库专栏 🚀 在ACM算法题库专栏,热情推崇算法之美,精心整理了各类比赛题目的详细解法,包括但不限于ICPC、CCPC、蓝桥杯、LeetCode周赛、传智杯等等。无论您是刚刚踏入算法领域,还是经验丰富的竞赛选手,这里都是提升技能和知识的理想之地。 ✨ 经典…...

【服务器能干什么】二十分钟搭建一个属于自己的 RSS 服务

如果大家不想自己捣鼓,只是想尝尝鲜,可以在下面留言,我后台帮大家开几个账号玩一玩。 哔哩哔哩【高清版本可以点击去吐槽到 B 站观看】:【VPS服务器到底能干啥】信息爆炸的年代,如何甄别出优质的内容?你可能需要自建一个RSS服务!_哔哩哔哩_bilibili 前言 RSS 服务 市…...

热门免费api接口:含核验API,物流api,短信api,天气api。。。

热门免费api接口&#xff1a;含核验API,物流api,短信api,天气api。。。 银行卡二要素&#xff1a;检测输入的姓名、银行卡号是否一致。毫秒级响应、直联保障&#xff0c;支持全国所有银联卡。银行卡三要素&#xff1a;检测输入的姓名、身份证号码、银行卡号是否一致。毫秒级响…...

基于AC6969的蓝牙控制RGB彩灯

程序的实现思路&#xff1a;单片机与手机app之间通过蓝牙实现通讯&#xff0c;通过点击屏幕上的对应色块然后app会把对应的RGB值发送到单片机。然后单片机会对数据进行解析然后把数字量转换为模拟量&#xff0c;然后通过PWM控制IO口输出不同的电压以此来达到控制RGB灯 RGB彩灯原…...

【C++高阶(五)】哈希思想--哈希表哈希桶

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 哈希结构 1. 前言2. unordered系列容器3. 哈希概…...

45、Flink 的指标体系介绍及验证(1)-指标类型及指标实现示例

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

SAP创建ODATA服务-Structure

SAP创建ODATA服务-Structure 1、创建数据字典 进入se11创建透明表ZRICO_USR,并创建对应字段 2、创建OData service 首先创建Gateway service project&#xff0c;事务码&#xff1a;SEGW&#xff0c;点击Create Project 按钮 Gateway service Project分四个部分&#xff1a…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...