如何对加密字段进行模糊查询

news2024/12/24 21:54:19

当我们在日常开发中设置数据表时,经常需要定义一些敏感字段,如:身份证号、手机号、住址、账号密码等信息,对待这些敏感信息,我们必须进行加密存储,以保证数据存储安全。但是,当用户查询个人信息或者后台管理员根据某个条件筛选用户时,敏感信息又需要进行脱密显示。这往往令我们开发者十分头大,不知道如何实现,那接下来我就介绍几种实现方式:

先全部解密再查询

这是一种暴力解法。我们可以把所有加密数据先全部加载到内存中,在内存中对所有数据再进行解密,然后根据条件进行筛选查询,这完全具有可行性。但是,我们需要明白,程序所分到的内存是有限的,不可能无限大,如果数据库中的数据非常多时,全部加载到内存中进行解密查询,这很容易发生内存溢出,因此不推荐使用这种方法。

图解:

  1. 先将数据库中的所有数据加载到内存中,用集合来接收所有对象数据。
    在这里插入图片描述
  2. 在内存中,对所有加密数据进行解密,并用解密后的数据替换掉加密数据。
    在这里插入图片描述
  3. 将需要查询的条件参数进行传入,然后在内存中根据参数进行查询,最后返回查询结果。
    在这里插入图片描述

建立明文映射表

这是一种假加密法。我们将加密字段的解密数据与主表的主键建立联系,形成一张映射表。当需要查询时,首先在映射表中进行查询,查询到后再根据查到的主键在主表中进行查询,然后将得到的数据进行脱密显示。这种方法可以很好的避免内存溢出问题,但是能看出这是一种假加密,敏感数据事实上还是明文存储,并没有完全加密,存在一定的数据安全风险。

图解:

  1. 在数据库中建立主表(user表)和映射表(sys_user_phone_encrypt表),并对两表之间的字段建立映射关系。
    在这里插入图片描述
  2. 根据查询条件在映射表中进行模糊查询,如果能查到则返回主表的主键值(映射表中的user_id字段值),然后根据主键值再在user表中进行查询,将查询到的结果进行解密显示;如果查询不到,则返回空值。
    在这里插入图片描述

使用SQL语句进行解密查询

我们在执行查询时,可以直接对加密字段进行解密,然后再查询,相当于将解密语句嵌入到查询语句中。这种方法实现方式容易,成本小,具有非常明显的优点;但是缺点也很明显,查询字段无法建立索引,不能优化查询,并且在这种方式中,我们还必须知道敏感字段的加密算法。

图解:

  1. 数据库在执行模糊查询时,先对查询的数据进行解密,然后对比查询条件,如果符合则将该条信息传入内存。
    在这里插入图片描述
  2. 在内存中,后台对该信息进行解密,然后进行展示。

设置分词密文映射表

这其实是对“建立明文映射表”的升级。在设计时,我们需要把敏感字段进行分段,然后将分段后的数据加密,加密完成后将数据拼接成字符串并与主表的主键一起放入分词密文映射表,形成映射关系。在查询时,我们首先将查询条件进行加密,然后根据解密后的条件在分词密文映射表中进行查询,得到主键值,最后根据主键值在主表中进行查询并解密显示。
例如,某用户的手机号为12345678900,在存入用户表时,给该用户分配了一个主键,主键值为1001,该用户的手机号分成了“1234”、“2345”、“3456”、“4567”、“5678”、“6789”、“7890”和“8900”八个字段,首先数据库对该八个字段分别进行加密,然后将加密后的八个字段数据进行拼接形成字符串,最后将该用户手机号加密后形成的字符串和该用户主键一起存入分词密文映射表中(只要映射关系正确,分词密文映射表可以同时存储多个加密字段),同时也将该用户手机号加密后形成的字符串存入主表中。如果后台管理员需要查询手机尾号为8900的用户,此时系统首先会对8900进行加密,然后将加密后的字符串在分词密文映射表中进行查询得到主键值,最后根据主键值在主表中进行查询,得到该用户的所有信息。在现在开发中,这种方法被广泛使用。

图解:

  1. 对敏感数据根据需要进行分段,然后将分段后的数据使用加密算法进行加密,最后将加密后的分段数据按顺序进行拼接,形成一个新字符串数据。
    在这里插入图片描述
  2. 将拼接的加密数据存入映射表中,并在映射表与主表之间建立映射关系。
    在这里插入图片描述
  3. 当需要查询某数据时,首先系统会把参数进行传入,然后将参数按相同算法进行加密,并在映射表中对参数进行模糊查询,如果查询成功则再根据查询到的主键值在主表中进行查询,最后将查询结果进行解密显示。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/684043.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DEV-C++安装OpenGL详细教程

Dev C配置OpenGL环境——计算机图形学 一、首先自行下载dev-c 二、以下过程请认真阅读~ 确保你的C:\Windows\System32与C:\Windows\SysWOW64中有上述链接中的.dll文件(即:glut.dll,glut32.dll)确保你的~\Dev-CPP\MinGW64\x86_64-w64-mingw32\lib中有上述链接中的…

Mybatis源码分析_解析大流程梳理_解析配置文件 (3)

学习mybatis,绕不开一个核心类 Configuration。这个类相当于一个小型数据库,把mybatis里面所有的配置信息基本全部给存储起来了。 package org.apache.ibatis.session;import java.util.Arrays; import java.util.Collection; import java.util.HashMap;…

常见的网络抓包工具推荐

因为发现好多人想抓包,但是不知道有哪些工具,今天我给大家推荐几款抓包工具,希望对大家有所帮助。 网络抓包工具的用途 网络抓包工具的主要功能是将网络执行的过程,详细的记录下来。如果你是一个程序员,肯定对网络抓…

上传视频文件,基于断点续传(整合Minio)

目录 1、什么是断点续传 2、分块文件 3、合并文件 4、 Minio 分布式文件系统整合断点续传 4.1 进行文件分块上传到 Minio 4.2 进行 Minio 中分块文件的合并 5、使用 Minio 进行断点续传的注意事项 相信很多小伙伴在上传下载图片或者视频的时候,突然间(…

java多商户商城系统源码下载支持二开

商城系统源码 整套源码开源 支持二次开发,支持PHP商城源码及JAVA商城源码 多端应用,一键部署,满足多场景业务需求 支持商城APP源码、分销商城源码、B2B2C源码、B2B网上商城源码等等 社交电商引流,数十种促销工具,帮助提升店铺成…

ncnn源码阅读(一)----阅读方法和参考教程

〇、ncnn源码阅读的方法和参考教程 目前我的工作涉及推理框架较多,所以就想阅读一些他人的开源框架,来提升自己在语言层面和框架层面的认知。这个过程中发现了一些比较好的教程,我的阅读ncnn源码之旅将参考 嘻嘻嘻大佬。 一、从下载代码开始…

ThreadPoolExecutor的execute方法

方法介绍 execute方法是将任务提交到线程池中的核心方法。线程池的执行流程可以通过execute内部进行的逻辑判断得知。 代码展示与分析 Runnable command。方法体中的参数代表着提交过来的任务。任务不能为null的非空判断。不然就会抛出空指针异常。int c ctl.get();获取ctl的…

【性能测试二】性能测试工具LoadRunner学习一 VUG

目录 🌟一、LoadRunner的环境搭建 🌟二、介绍LoadRunner 🌟三、LoadRunner脚本录制(重点) 🌈1、介绍一个WebTours项目 🌈2、脚本录制 🌈3、脚本加强(重点&#xff…

【kubernetes系列】Kubernetes中的重要概念(二)

本章节将继续分享关于kubernetes中的一些重要概念。 一、Pod Pod 是 Kubernetes 的最小工作单元。每个 Pod 包含一个或多个容器。Pod 中的容器会作为一个整体被 Master 调度到某个 Node 上运行。(可以把pod想象成豌豆荚,里面的豌豆就是容器,可以有一个或…

浅析电动机综合保护器的工作原理与应用 安科瑞 许敏

摘 要:电动机综合保护器以先进技术为支持,具有非常强大的整机功能,就实际应用效果来说,其测试精度、分辨率较高,具有良好的抗干扰能力,保护动作可靠,能为电动机提供负荷保护、短路保护、断相保…

《面试1v1》MyBatis

🍅 作者简介:王哥,CSDN2022博客总榜Top100🏆、博客专家💪 🍅 技术交流:定期更新Java硬核干货,不定期送书活动 🍅 王哥多年工作总结:Java学习路线总结&#xf…

Redis使用Bitmap实现数据统计

一、概念 什么是二值状态?二值状态就是元素只有0和1这两种情况,比如在签到的场景中只有签到和未签到两种,或者登陆的场景中只有已登录和未登录的情况。 Bitmap 的底层数据结构用的是 String 类型的 SDS 数据结构来保存位数组,Redis 把每个…

2-css-2

一 复合选择器 定义:由两个或多个基础选择器,通过不同的方式组合而成。 作用:更准确、更高效的选择目标元素(标签)。 1 后代选择器 后代选择器:选中某元素的后代元素。 选择器写法:父选择器…

05_Linux设备树下的LED驱动

目录 设备树LED驱动原理 修改设备树文件 LED灯驱动程序编写 编写测试APP 运行测试 设备树LED驱动原理 驱动文件中定义有关寄存器物理地址,然后使用io_remap函数进行内存映射,得到对应的虚拟地址,最后操作寄存器对应的虚拟地址完成对GPIO的初始化。本实验使用设备树来向 L…

操作系统——Windows 进程管理

一、实验题目 Windows 进程管理 二、实验目的 (1)学会使用 VC 编写基本的 Win32 Consol Application(控制台应用程序)。 (2)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟…

UEditorPlus v3.2.0 兼容规则过滤,若干问题修复

UEditor 是由百度开发的所见即所得的开源富文本编辑器,基于 MIT 开源协议,该富文本编辑器帮助不少网站开发者解决富文本编辑器的难点。 UEditorPlus 是有 ModStart 团队基于 UEditor 二次开发的富文本编辑器,主要做了样式的定制,…

绩效管理怎么做?一文带你搞懂绩效管理!

在职场中,我们经常会听到“绩效管理”这个词汇。但是,你是否真正理解绩效管理的含义和意义呢? 现在很多企业的绩效管理都变味了,让员工觉得绩效就是想方设法扣工资、绩效就是控制人的手段、绩效不是激励而是威胁、绩效就是打分游…

41 # 编码的问题

常见的进制 10 进制:除表示正负的符号外,以 1~9 开头,由 0~9 组成。如 128,234,-278。2 进制:以 0b 开头,0b118 进制:以 0 或 0o开头,由 0~7 组成的数。如 0126, 050000…

【Redis】多级缓存之OpenResty:nginx查询Tomcat与Redis以及nginx本地缓存

目录 一、认识OpenResty 二、请求参数处理 三、查询Tomcat 四、Redis缓存预热 五、查询Redis缓存 六、nginx本地缓存 一、认识OpenResty OpenResty是一个基于nginx的高性能Web平台,他用于方便的搭建能够处理高并发、扩展性极高的动态Web应用、Web服务和动态网…

SuperMap GIS基础产品组件GIS FAQ集锦(3)

SuperMap GIS基础产品组件GIS FAQ集锦(3) 【Unity】Unity中如何将场景内容限制在屏幕中间1/3处? 【解决办法】1、新建两个相机,一个代表左边屏幕,一个代表右边屏幕 2、通过Viewport Rect设置相机显示在屏幕中的位置&a…