【MySQL】敏感数据加密后如何模糊查询?

news2024/9/20 23:45:24

往期文章:

【MySQL】索引

【MySQL】索引底层的数据结构 B+Tree

【MySQL】SQL语句执行流程

【MySQL】order by 的排序策略

【MySQL】explain 执行计划各字段解析


一、前言

在日常开发中,我们通常需要对敏感数据进行加密存储,如:手机号、身份证号码、银行卡号等。

但是此时就会出现一个问题,这些信息对加解密的要求也不一样,比如说密码,一般使用的都是不可逆的慢 hash 算法,慢 hash 算法可以避免暴力破解(典型的用时间换安全性)。 

在检索时我们既不需要解密也不需要模糊查找,直接使用密文完全匹配,但是手机号就不能这样做,因为手机号我们要查看原信息,并且对手机号还需要支持模糊查找。

关于这个问题,有多种解决方案,这些方案也是各有优劣,下面就一起来看看都有哪些方案。

二、先解密,再匹配

具体的做法就是将所有数据加载到内存中进行解密,解密后通过程序算法来模糊匹配。

一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。

就用 DES 加密算法来举例,hello world 加密后的密文是 def3f8ea781a12413b35b1c41f13ab32 占32个字节

条数BytesMB
100w3200万30.52
1000w3.2亿305.18
1亿32亿3051.76

可以看出,这种做法实现很简单,但是也存在一个很明显的问题,数据量小时完全没问题,一旦数据量增大,很容易就会导致 OOM,简直就是灾难!

所以不建议采用!!!

 

二、映射表 

将密文数据映射一份明文映射表,然后模糊查询映射表来关联密文数据。

那为什么还要对数据加密呢,直接不加密不是更好么!

我们既然对数据加密肯定是有安全诉求才会这样做,增加一个明文的映射表就违背了安全诉求,这样做既不安全也不方便完全是画蛇添足,多此一举。

所以不建议采用!!! 

 

三、数据库层面加密 

在数据库中实现与程序一致的加解密算法,修改模糊查询条件,使用数据库加解密函数先解密再模糊查找,这样做的优点是实现成本低,开发使用成本低,只需要将以往的模糊查找稍微修改一下就可以实现。

但是缺点也很明显,这样做无法利用数据库的索引来优化查询,甚至有一些数据库可能无法保证与程序实现一致的加解密算法,但是对于常规的加解密算法都可以保证与应用程序一致。

如果对查询性能要求不是特别高、对数据安全性要求一般,可以使用常见的加解密算法比如说AES、DES之类的也是一个不错的选择。

如果公司有自己的算法实现,并且没有提供多端的算法实现,要么找个算法好的人去研究吃透补全多端实现,要么放弃使用这个办法。

 

四、分词 

普通的加密模式下,整段内容会被整体加密,密文就不再具备被模糊查询的功能。

考虑到某些字段存在模糊查询的求,可以使用一种高级的加密模式,加密后的密文仍然可以支持模糊查询功能。

在普通加密方式下,我们在数据库检索该加密数据的时候必须用全文匹配。如姓名:“张大铁”,用普通方式加密后成为 “DQ21aTz/oe9qT2Xje1tTcddQ”,在数据库查询时,如果希望获取关于 ”张大铁” 的记录,则对应筛选条件就是筛选出加密姓名为 “DQ21aTz/oe9qT2Xje1tTcddQ” 的记录。

然而,如果是想检索姓名中含有 “大铁” 的人的记录,原本可以用数据库模糊查询(如 SQL 的 like  语句)方式获取,现在加密后就无法满足这样的要求了。

此时便可以采用对密文数据进行分词组合,将分词组合的结果集分别进行加密,然后存储到扩展列的方式,查询时通过 key like '%partial%',这是一个比较划算的实现方法。

具体做法:根据4位英文字符(半角),2个中文字符(全角)为一个检索条件。将一个字段拆分为多个。

比如:qiuxuan,使用4个字符为一组的加密方式。

第一组 qiux ,第二组 iuxu ,第三组 uxua ,第四组 xuan … 依次类推

如果需要检索所有包含检索条件 4 个字符的数据 比如:uxua,加密字符后通过 key like “%partial%”  查库。 

但是使用这种方式也有一定代价:

• 支持模糊查询加密方式,产出的密文比较长

• 支持的模糊查询子句长度必须大于等于4个英文/数字,或者2个汉字。不支持过短的查询(出于安全考虑);

• 返回的结果列表中有可能有多余的结果,需要增加筛选的逻辑:对记录先解密,再筛选;

对每一个字段都需要独立设置这个字段的加密模式,而且加密后密文长度会膨胀几倍以上,这是需要考虑的点,使用前需根据应用场景确认每个字段的加密方案,一旦加密开始之后,再更改成本就较高了。

这个方法优点就是实现起来不算复杂,使用起来也较为简单,算是一个折中的做法,因为会有扩展字段存储成本会有升高,但是可利用数据库索引优化查询速度,所以还是比较推荐使用这个方法。 

 

参考文章:

被问懵了,加密后的数据如何进行模糊查询?icon-default.png?t=O83Ahttps://cloud.tencent.com/developer/article/2085806

一  叶  知  秋,奥  妙  玄  心 

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

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

相关文章

封装一个 Vue 3 流程线可视化组件

这个组件展示了一系列带有节点和箭头连接的流程线,并具备不同风险等级的样式和动画效果,非常适合大屏展示项目。 功能概述 这个流程线组件具备以下功能: 动态渲染:根据传入的数据,组件可以自动生成节点和箭头。风险…

后端面试经典问题汇总

后端面试经典问题汇总 后端开发在现代互联网应用中扮演着关键角色,涉及的数据处理、业务逻辑和系统性能等方面在面试中常常会被深入考察。本文将总结一些后端面试中常见的经典问题,并给出简单的解答思路。 1. HTTP 协议 问题:请解释 HTTP …

Linux:五种IO模型

1:五种IO模型 1:阻塞IO 阻塞IO: 在内核将数据准备好之前,系统调用会一直等待.所有的套接字,默认 都是阻塞方式。 2:非阻塞 IO 非阻塞 IO: 如果内核还未将数据准备好, 系统调用仍然会直接返回, 并且返回EWOULDBLOCK 错误码。 非阻塞 IO 往往需…

Centos7.9部署Gitlab-ce-16.9

一、环境信息 软件/系统名称版本下载地址备注Centos77.9.2009https://mirrors.nju.edu.cn/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.isogitlab-cegitlab-ce-16.9.1https://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-16.9.1-ce.0.el7.x86_64.rpm…

4款免费录屏工具,哪款更实用?

作为一个经常需要录制教程和游戏视频的UP主,我尝试过市面上不少录屏工具。今天,我就来分享一下我使用过的四款软件录制全屏时的体验感受,看看哪款软件的表现更胜一筹。 一、福昕录屏大师 网址:https://www.foxitsoftware.cn/REC/…

配置 MinGW 以及使用 g++ 编译 C++ 程序

如何在 Windows 上安装和配置 MinGW 以及使用 g 编译 C 程序 (C语言(gcc)类似 ) 在Windows环境下,使用C进行编程需要一个编译器,而MinGW (Minimalist GNU for Windows) 是一个常用的C/C编译器工具集。对于编程新手来说&#xff0c…

SAP与赛美特MES系统集成案例

一、项目环境 上海某通信有限公司主要产品应用于图像传感器、 图像信号处理芯片、 低功耗芯片、 射频芯片。 为实现生产流程的自动化调度,减少人为干预的错误,保证流程的一致性和合规性,同时也简化操作流程,降低培训成本。&am…

护眼台灯对眼睛好吗?眼科医生推荐的台灯告诉你答案

作为一名家长,我深刻体会到保护孩子眼部健康的重要性。随着科技的迅猛发展,孩子们越来越多地接触并依赖电子设备,如平板电脑、手机和电视,长时间盯着屏幕已成为他们日常生活的一部分。然而,这些屏幕发出的蓝光及闪烁的…

等保测评前的准备工作:企业必知的五大步骤

信息安全等级保护(等保)测评是企业信息安全合规的重要环节,对于确保企业信息系统的安全性、稳定性和合规性具有重大意义。为了顺利通过等保测评,企业需要提前做好充分的准备。本文将从实战角度出发,详细介绍等保测评前…

2024年10款好用的图纸加密软件推荐|有效的图纸加密方法分享

在数字化时代,保护CAD图纸等设计文件的安全性是企业不可忽视的重要任务。随着技术的不断进步,各类图纸加密软件应运而生,为企业提供了强大的数据保护能力。本文将为您推荐2024年十款好用的图纸加密软件,并分享一些有效的图纸加密方…

GD32F4开发 -- FATFS文件系统

一、FATFS源码下载 FatFs - Generic FAT Filesystem Module (elm-chan.org) 二、移植 打开ffconf.h文件,找到对应宏并按照需求修改 FF_CODE_PAGE: #define FF_CODE_PAGE 936 //改为936以支持简体中文 /* This option specifies the OEM code page to be used on…

Find My资讯|国外外设品牌发布新型素皮护照套,支持苹果Find My功能

外设品牌 Satechi 发布一款采用苹果Find My技术的新型素皮护照套,售价为 59.99 美元。这款新型护照套除了可以存放护照外,还可存放银行卡、信用卡、身份证、登机牌等物品,其最大特性是采用了与苹果 AirTags 相同的技术,内置了可充…

YOLOv9改进策略【Neck】| 有效且轻量的动态上采样算子:DySample

一、本文介绍 本文记录的是利用DySample上采样对YOLOv9的颈部网络进行改进的方法研究。YOLOv9采用传统的最近邻插值的方法进行上采样可能无法有效地捕捉特征的细节和语义信息,从而影响模型在密集预测任务中的性能。DySample通过动态采样的方式进行上采样&#xff0…

Brave编译指南2024 Windows篇:安装depot_tools(三)

1.引言 在编译Brave浏览器的过程中,depot_tools是不可或缺的一部分。这是一组由Chromium项目提供的脚本和工具,用于获取、管理和更新Chromium及其衍生项目的源码。通过depot_tools,开发者可以方便地同步最新的源码版本,并进行项目…

NVD系列语音芯片在报警器中通常应用在哪些场景中

语音芯片在各类场景中应用的最大作用就是进行语音提示和警报提示。本文将对NVD系列语音芯片应用在报警器中的场景。 1.提升电动车的安全性 当电动车遭受震动或异常移动时,报警器会感应到并触发报警装置,通常是通过发出高分贝的声音警报来吸引人们的注意…

基于HTML+JS+CSS+Echarts实现的设备环境监测可视化平台前端整套模板

效果图 基于HTMLJSCSSEcharts实现的设备环境监测可视化平台前端整套模板。可用过修改源码快速完成需求。 源码结构 下载地址

Shell实用功能及文件权限

1、使用命令“cat /etc/named.conf”设置为别名named,然后再取消别名。 设置别名:alias namedcat /etc/named.conf 取消别名:unalias named 2、使用echo命令和输出重定向创建文本文件/root/nn,内容是hello,然后再使用…

C++笔记---list

1. list的介绍 list其实就是就是我们所熟知的链表(双向循环带头结点),但其是作为STL中的一个类模板而存在。 也就是说,list是可以用来存储任意类型数据的顺序表,既可以是内置类型,也可以是自定义类型&…

【目标检测数据集】工具钳子、剪刀、螺丝刀检测数据集3668张3类VOC+YOLO格式

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):3668 标注数量(xml文件个数):3668 标注数量(txt文件个数):3668 标注…

安卓13系统导航方式分析以及安卓13修改默认方式为手势导航 android13修改导航方式

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.彩蛋1.前言 系统导航方式默认一般是按键的,如果要改成手势的话,我们来看看用户怎么修改的: 设置=>系统=>手势=>系统导航,在这里进行修改。我们来分析下这个流程,并且将其修改为…