加入收藏 | 设为首页 | 会员中心 | 我要投稿 天瑞地安资讯网_保定站长网 (https://www.52baoding.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2022-10-10 13:05:01 所属栏目:MySql教程 来源:
导读:  mysql如何对已经加密的字段进行模糊查询详解

  目录

  场景:在模糊查询电话号码的时候,发现电话号码是进行加密过的,而传进来的参数却是明文的

  PS:作为一个合格的程序员对用户的一些敏感
  mysql如何对已经加密的字段进行模糊查询详解
 
  目录
 
  场景:在模糊查询电话号码的时候,发现电话号码是进行加密过的,而传进来的参数却是明文的
 
  PS:作为一个合格的程序员对用户的一些敏感数据都要进行加密处理操作
 
  比如:姓名、手机号、身份证号等等。
 
  问题:但是加密之后我们怎么来查询呢?
 
  mysql 通配符查询_mysql通配符_mysql通配符使用
 
  1、客户端一般是这样的
 
  mysql通配符使用_mysql 通配符查询_mysql通配符
 
  1、了解HEX 函数与UNHEX 函数
 
  HEX 函数:将一个字符串或数字转换为十六进制格式的字符串
 
  UNHEX 函数:执行HEX(str)的逆运算。 即,它将参数中的每对十六进制数字解释为一个数字,并将其转换为该数字表示的字符。 结果字符将作为二进制字符串返回。
 
  演示:
 
  -- 先将mysql字符串转换为十六进制格式的字符串
  SELECT HEX("mysql")
  -- 输出结果
  6D7973716C
  -- 在将上面的字符串转换成二进制字符串
  SELECT UNHEX("6D7973716C")
  -- 输出结果
  mysql
  2、了解AES_ENCRYPT函数与AES_DECRYPT函数
 
  1、AES_ENCRYPT函数mysql通配符使用,这个函数的使用场景是对一些安全性要求比较高的数据使用AES加密,语法为:
 
  AES_ENCRYPT(str,key),其中第一个参数表示要加密的数据,第二参数是对应的key。
 
  2、AES_DECRYPT函数,这个函数是与AES_DECRYPT对应的一个函数,用于解密经过AES_DNCRYPT加密的数据,语法为:AES_DNCRYPT(str,key)。
 
  -- 使用AES_ENCRYPT函数对明文进行加密操作
  SELECT AES_ENCRYPT('小王', 'intel1234567890a') FROM dual;
  -- 使用AES_DECRYPT函数密文进行解密操作
  SELECT AES_DECRYPT(AES_ENCRYPT('小王', 'intel1234567890a'),'intel1234567890a') FROM dual;
  然后把上面的函数一起结合使用就可以实现模糊查询了
 
  -- 此处使用AES-128-ECB加密模式
  --第一个参数(小王)明文 第二个参数(intel1234567890a)为秘钥(需要跟下面java代码对应)
  select hex(aes_encrypt("小王","intel1234567890a"))  from dual; --明文加密为密文
  --第一个sql加密出来的密文
  select aes_decrypt(unhex("密文"),"intel1234567890a") from dual; --密文解密为明文
  --模糊查询
  select * from table where aes_decrypt(unhex("密文"),"intel1234567890a") like CONCAT('%','明文','%')
  有人会问了为什么要使用hex和unhex我直接使用aes_encrypt和aes_decrypt加解密不就行了吗?
 
  因为直接使用aes_encrypt会导致加密出来的结果乱码
 
  mysql通配符_mysql 通配符查询_mysql通配符使用
 
  java工具类AES加解密同步使用
 
  package com.lezu.springboot.utils;
  import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
  import cn.hutool.crypto.symmetric.SymmetricCrypto;
  import java.nio.charset.StandardCharsets;
  /**
   * AES加密方式算法工具类
   * 此处使用AES-128-ECB加密模式,key需要为16位。
   */
  public class AesUtils {
      /**
       * KEY 随机的后续可更改
       */
      private static final byte[] key = "intel1234567890a".getBytes(StandardCharsets.UTF_8);
      /**
       * 初始化加密(默认的AES加密方式)
       */
      private static final SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key);
      /**
       * 加密
       *
       * @param str 加密之前的字符串
       * @return
       */
      public static String encryptHex(String str) {
          return aes.encryptHex(str);
      }
      /**
       * 解密
       *
       * @param str 加密后的字符串
       * @return
       */
      public static String decryptStr(String str) {
          return aes.decryptStr(str);
      }
      public static void main(String[] args) {
          String plaintext = "小王";
          String ciphertext = "183b2940aa6c6d2d73721415660c64c8";
          String encryptHex = AesUtils.encryptHex(plaintext);
          System.out.println("加密后: " + encryptHex);
          String decryptStr = AesUtils.decryptStr(ciphertext);
          System.out.println("解密后: " + decryptStr);
      }
  //    加密后: 183b2940aa6c6d2d73721415660c64c8
  //    解密后: 小王
  }
  总结
 
  到此这篇关于mysql如何对已经加密的字段进行模糊查询的文章就介绍到这了,更多相关mysq对加密字段模糊查询内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
 
  时间: 2022-09-07
 
  MySQL模糊查询用法大全(正则、通配符、内置函数)
 
  mysql通配符_mysql 通配符查询_mysql通配符使用
 
  SELECT * from table where username like '%陈哈哈%' and hobby like '%牛逼' 这是一条我们在MySQL中常用到的模糊查询方法,通过通配符%来进行匹配,其实,这只是冰山一角,在MySQL中,支持模糊匹配的方法有很多,且各有各的优点.好了,今天让我带大家一起掀起MySQL的小裙子,看一看模糊查询下面还藏着多少鲜为人知的好东西. 一.MySQL通配符模糊查询(%,_) 1-1. 通配符的分类 "%" 百分号通配符: 表示任何字符出现
 
  mysql中模糊查询的四种用法介绍
 
  下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为"张三","张猫三"."三脚猫","唐三藏"等等有"三"的记录全找出来. 另外,如果需要找出u_name中既有"三"又有
 
  mysql中like % %模糊查询的实现
 
  1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为"张三","张猫三"."三脚猫","唐三藏"等等有"三"的记录全找出来. 另外,如果需要找出u_name中既有"三"又有"猫"的记录,请使用a
 
  mysql模糊查询like和regexp小结
 
  在mysql中实现模糊查询的有like和regexp. ------------------------ like的用法许多人都是知道的,最为常用的情况就是select * from a where name like '%a%'; 其中'%'代表的是任意个字符,它的效果像是正则表达式里的'*',它有几种用法:'a%','%a%','%a',分别表示以什么开头,存在什么以及以什么结尾. 另外也可以使用'_'字符,这表示一个任意字符.效果类似正则表达式里面的'.'. like是对这个字段里面的所有
 
  mysql模糊查询like与REGEXP的使用详细介绍
 
  前言 在mysql中实现模糊查询的有like和regexp.本文通过实例代码给大家详细介绍这两者的使用方法,下面来跟着小编一起学习学习吧. like模式 like意思是长得像,有两个模式:_和% _表示单个字符,通常用来查询定长的数据,如查出所有姓王的三个字的人名,假设姓名列名为name,注意"王"后面有两个_ select name from 表名 where name like '王__'; %表示0个或多个任意字符,如查出所有姓王的人名 select name from 表名 w
 
  Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办
 
  mysql通配符_mysql通配符使用_mysql 通配符查询
 
  项目开发中,在做Mybatis动态查询时,遇到了一个问题:MySQL在进行LIKE模糊查询时,输入英文可以正常检索出结果,但是输入中文后检索得到的结果为空. 由于是使用GET方式请求,所以为了确保中文不乱码,在控制台接收到请求参数后,对中文进行了一次编码. try { realName = new String(realName.getBytes("GBK"), "UTF-8"); } catch (UnsupportedEncodingException exce
 
  浅谈MySQL模糊查询中通配符的转义
 
  sql中经常用like进行模糊查询,而模糊查询就要用到百分号"%",下划线"_"这些通配符,其中"%"匹配任意多个字符,"_"匹配单个字符.如果我们想要模糊查询带有通配符的字符串,如"60%","user_name",就需要对通配符进行转义,有两种方式.如下: 1.反斜杠是转义符,通过反斜杠来转义%,使其不再是通配符.这里第一个%是通配符,第二个%不是通配符. select perc
 
  MySQL 数据库 like 语句通配符模糊查询小结
 
  MySQL 报错:Parameter index out of range (1 > number of parameters, which is 0)--MySQL 数据库 like 语句通配符模糊查询小结 前言 今天在使用MySQL语句执行增删改查操作时,控制台报出了以下错误:Parameter index out of range (1 > number of parameters, which is 0).翻译过来意思就是:查到结果数据为1,真实值应为0,参数越界,产生错误.如此也就明
 
  mysql对于模糊查询like的一些汇总
 
  1.常见用法: (1)搭配%使用 %代表一个或多个字符的通配符,譬如查询字段name中以大开头的数据: (2)搭配_使用 _代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出下面一条数据: 2.使用like模糊查询会导致索引失效,在数据量大的时候会有性能问题 (1)尽量少以%或者_开头进行模糊查询 通过explain执行计划,我们发现,使用like模糊查询时,如果不以%和_开头查询的话,索引还是有效的 以%或者_开头查询,索引失效 (2)使用覆盖索引 当查询的的条件和查询
 
  mysql中使用instr进行模糊查询方法介绍
 
  在mysql中使用内部函数instr,可代替传统的like方式查询,并且速度更快. instr 函数,第一个参数是字段,第二个参数是要查询的串,返回串的位置,第一个是1,如果没找到就是0. 例如,查询字段name中带"军"的名字,传统的方法是: select name from 用户表 where name like `%军%'; 用instr的方法: select name from 用户表 where instr('name','军'); 或: select name from 用
 
  MySQL单表多关键字模糊查询的实现方法
 
  在最近的一个项目需要实现在MySQL单表多关键字模糊查询,但这数个关键字并不一定都存在于某个字段.例如现有table表,其中有title,tag,description三个字段,分别记录一条资料的标题,标签和介绍.然后根据用户输入的查询请求,将输入的字串通过空格分割为多个关键字,再在这三个字段中查询包含这些关键字的记录. 可目前遇到的问题是,这些关键字是可能存在于三个字段中的任意一个或者多个,但又要求三个字段必须包含所有的关键词.如果分别对每个字段进行模糊匹配,是没法实现所需的要求,由此想到两种
 
  PHP MYSQL实现登陆和模糊查询两大功能
 
  mysql通配符使用_mysql 通配符查询_mysql通配符
 
  
 

(编辑:天瑞地安资讯网_保定站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!