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
:必需的。哈希长度,可用值包括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提供了多种加密和压缩方式,可以帮助保护数据库中的敏感数据。以下是一些常见的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分割速度快,效果好࿰…...

常用的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实现定位滚动(elementui组件库) 如何滚动:参考链接 比如说指定某条对话内容滚动到可视区域的中间 html结构: <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作为主要编程语言,前端采用HTML、CSS、BootStrap等技术搭建前端界面,后端采用Django框架处理用户的请求。创新点:使用协同过滤推荐算法实现对当前用户个性化推荐。 其主要功能如下&#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 连接上进行全双工通信的协议,它可以提供实时的、双向的数据传输。Spring Boot 提供了对 WebSocket 的支持,我们可以使用 Spring Boot WebSocket 客户端来连接到 WebSocket 服务器,并进行实时通信。 本文将…...
第五题-kotori和素因子【第六届传智杯程序设计挑战赛解题分析详解复盘】(JavaPythonC++实现)
🚀 欢迎来到 ACM 算法题库专栏 🚀 在ACM算法题库专栏,热情推崇算法之美,精心整理了各类比赛题目的详细解法,包括但不限于ICPC、CCPC、蓝桥杯、LeetCode周赛、传智杯等等。无论您是刚刚踏入算法领域,还是经验丰富的竞赛选手,这里都是提升技能和知识的理想之地。 ✨ 经典…...

【服务器能干什么】二十分钟搭建一个属于自己的 RSS 服务
如果大家不想自己捣鼓,只是想尝尝鲜,可以在下面留言,我后台帮大家开几个账号玩一玩。 哔哩哔哩【高清版本可以点击去吐槽到 B 站观看】:【VPS服务器到底能干啥】信息爆炸的年代,如何甄别出优质的内容?你可能需要自建一个RSS服务!_哔哩哔哩_bilibili 前言 RSS 服务 市…...
热门免费api接口:含核验API,物流api,短信api,天气api。。。
热门免费api接口:含核验API,物流api,短信api,天气api。。。 银行卡二要素:检测输入的姓名、银行卡号是否一致。毫秒级响应、直联保障,支持全国所有银联卡。银行卡三要素:检测输入的姓名、身份证号码、银行卡号是否一致。毫秒级响…...

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

【C++高阶(五)】哈希思想--哈希表哈希桶
💓博主CSDN主页:杭电码农-NEO💓 ⏩专栏分类:C从入门到精通⏪ 🚚代码仓库:NEO的学习日记🚚 🌹关注我🫵带你学习C 🔝🔝 哈希结构 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,事务码:SEGW,点击Create Project 按钮 Gateway service Project分四个部分:…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
文章目录 一、开启慢查询日志,定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...
起重机起升机构的安全装置有哪些?
起重机起升机构的安全装置是保障吊装作业安全的关键部件,主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理: 一、超载保护装置(核心安全装置) 1. 起重量限制器 功能:实时监测起升载荷&a…...

【技巧】dify前端源代码修改第一弹-增加tab页
回到目录 【技巧】dify前端源代码修改第一弹-增加tab页 尝试修改dify的前端源代码,在知识库增加一个tab页"HELLO WORLD",完成后的效果如下 [gif01] 1. 前端代码进入调试模式 参考 【部署】win10的wsl环境下启动dify的web前端服务 启动调试…...