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分四个部分:…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
