mysql如何对已经加密的字段进行模糊查询详解

MySQL是一种常用的关系型数据库管理系统,而现在加密已经成为了一种比较常见的做法,但如果要对加密的字段进行模糊查询,就需要用到一些特殊技巧了。

一、加密方式

在MySQL中,加密方式有很多种。这里我们以AES加密为例。

1. 创建表格

首先,我们需要创建一个表格来存储数据。可以使用以下代码进行创建:

CREATE TABLE `user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(10) NOT NULL,

`password` varbinary(256) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

2. 插入数据

然后,我们需要往表格中插入一些数据。可以使用以下代码来进行插入:

INSERT INTO `user` (`name`, `password`) VALUES ('Tom',aes_encrypt('password','key')),('Jerry',aes_encrypt('1234','key'));

这里的`aes_encrypt()`函数用来对数据进行加密,第一个参数为要加密的数据,第二个参数为加密的密钥。

二、模糊查询

如果要对已经加密的字段进行模糊查询,就需要使用到一些特殊的技巧。

1. 解密数据

首先,我们需要把加密的数据解密出来,才能进行模糊查询。可以使用以下代码对数据进行解密:

SELECT `name`, CAST(aes_decrypt(`password`,'key') AS CHAR(50)) AS `password` FROM `user`;

这里的`aes_decrypt()`函数用来对数据进行解密,第一个参数为要解密的数据,第二个参数为解密的密钥。使用`CAST`函数把解密后的`varbinary`类型转化为`char`类型。

2. 模糊查询

然后,我们就可以对解密后的数据进行模糊查询了。可以使用以下代码来进行查询:

SELECT `name`, CAST(aes_decrypt(`password`,'key') AS CHAR(50)) AS `password` FROM `user` WHERE CAST(aes_decrypt(`password`,'key') AS CHAR(50)) LIKE '%ass%';

这里的`LIKE`操作符用来进行模糊查询,`%`表示任意字符的通配符。这里的查询语句是查找解密后的`password`字段中包含`ass`的所有记录。

三、总结

通过以上介绍,我们可以知道,在MySQL中,对已经加密的字段进行模糊查询并不困难,只需要使用到一些特殊技巧即可。不过需要注意的是,在进行加密时一定要使用可靠的算法和密钥,以保证数据的安全性。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签