色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

加密后的敏感字段還能進(jìn)行模糊查詢嗎?該如何實(shí)現(xiàn)?

jf_ro2CN3Fa ? 來(lái)源:CSDN ? 2023-06-05 16:43 ? 次閱讀

前言

有一個(gè)問(wèn)題不知道大家想過(guò)沒(méi)?敏感字段數(shù)據(jù)是加密存儲(chǔ)在數(shù)據(jù)庫(kù)的表中,如果需要對(duì)這些敏感字段進(jìn)行模模糊查詢,還用原來(lái)的通過(guò)sql的where從句的like來(lái)模糊查詢的方式肯定是不行的,那么應(yīng)該怎么實(shí)現(xiàn)呢?這篇文章就來(lái)解決這個(gè)問(wèn)題。

場(chǎng)景分析

假如有類似這樣的一個(gè)場(chǎng)景:有一個(gè)人員管理的功能,人員信息列表的主要字段有姓名、性別、用戶賬號(hào)、手機(jī)號(hào)碼、身份證號(hào)碼、家庭住址、注冊(cè)日期等,可以對(duì)任意一條數(shù)據(jù)進(jìn)行增、刪、改、查,其中姓名、身份證號(hào)碼、手機(jī)號(hào)碼字段要支持模糊查詢。

簡(jiǎn)單分析一個(gè)場(chǎng)景,可以知道:手機(jī)號(hào)碼、身份證號(hào)碼、家庭人址字段數(shù)據(jù)是敏感數(shù)據(jù),這些字段的數(shù)據(jù)是要加密存儲(chǔ)在數(shù)據(jù)庫(kù)里,在頁(yè)面上展示的時(shí)候需要進(jìn)行脫敏處理的。

如果用戶想要查詢真實(shí)姓名是包含有“張三”的所有人員信息,可以在頁(yè)面上輸入一個(gè)關(guān)鍵字,如“張三”,點(diǎn)擊開(kāi)始查詢后,這個(gè)參數(shù)會(huì)傳遞到后臺(tái),后臺(tái)會(huì)執(zhí)行一條sql,如“select * from sys_person where real_name like ‘%張三%’”,執(zhí)行結(jié)果中包含了所有用戶真實(shí)姓名包含有“張三”的所有數(shù)據(jù)記錄,如“張三”,“張三豐”等。

如果用戶要查詢手機(jī)號(hào)碼尾號(hào)是“0537”的用戶,后臺(tái)執(zhí)行類似與姓名模糊查詢的sql,"select * from sys_person where phone like '%0537'",肯定是得不到正確的結(jié)果的,因?yàn)槭謾C(jī)號(hào)碼字段在數(shù)據(jù)庫(kù)中的數(shù)據(jù)是加密后的結(jié)果,而‘0537’是明文。身份證號(hào)碼、家庭住址等其他敏感字段在模糊查詢的時(shí)候也都有類似這樣的問(wèn)題,這也是敏感字段模糊查詢的痛點(diǎn),即模糊查詢關(guān)鍵字與實(shí)際存儲(chǔ)的數(shù)據(jù)不一致。

實(shí)現(xiàn)方案

下面分享幾種解決方案:

第一種,先解密再查詢

查詢出目標(biāo)表內(nèi)所有的數(shù)據(jù),在內(nèi)存中對(duì)要模糊查詢的敏感字段的加密數(shù)據(jù)進(jìn)行解密,然后再遍歷解密后的數(shù)據(jù),與模糊查詢關(guān)鍵字進(jìn)行比較,篩選出包含有模糊查詢關(guān)鍵字的數(shù)據(jù)行。

這種方法是最容易想到的,但有一個(gè)比較明顯的問(wèn)題是,模糊查詢的過(guò)程是在內(nèi)存中進(jìn)行的,如果數(shù)據(jù)量特別大,很容易導(dǎo)致內(nèi)存溢出,因此不推薦在生產(chǎn)中使用這種方法;

第二種,明文映射表

新建一張映射表,存儲(chǔ)敏感字段解密后的數(shù)據(jù)與目標(biāo)表主鍵的映射表,需要模糊查詢的時(shí)候,先對(duì)明文映射表進(jìn)行模糊查詢,得到符合條件的目標(biāo)數(shù)據(jù)的主鍵,再返回來(lái)根據(jù)主鍵查詢目標(biāo)表;

這種方法,實(shí)際上是有點(diǎn)掩耳盜鈴的感覺(jué),敏感字段加密存儲(chǔ)的字段主要是考慮到安全性,使用明文映射表來(lái)存儲(chǔ)解密后的敏感字段,實(shí)際上相當(dāng)于敏感字段沒(méi)有加密存儲(chǔ),與最被要對(duì)敏感字段加密的初衷相違背,因此不推薦在生產(chǎn)中使用這種方法;

第三種,數(shù)據(jù)庫(kù)層面進(jìn)行解密查詢

后臺(tái)在執(zhí)行查詢sql時(shí)對(duì)敏感字段先解密,然后再執(zhí)行l(wèi)ike,以上面的人員管理列表模糊查詢?yōu)槔磳?duì)sql的改造為:“select * from sys_person where AES_DECRYPT(phone,'key') like '%0537'”;

這種方法的優(yōu)點(diǎn)是,成本比較小,容易實(shí)現(xiàn),但是缺點(diǎn)很明顯,該字段無(wú)法通過(guò)數(shù)據(jù)庫(kù)索引來(lái)優(yōu)化查詢,另外有一些數(shù)據(jù)庫(kù)無(wú)法保證數(shù)據(jù)庫(kù)的加解密算法與程序的加解密算法一致,可能會(huì)導(dǎo)致可以程序中加密,但是無(wú)法在數(shù)據(jù)庫(kù)中解密的或者可以在數(shù)據(jù)庫(kù)加密無(wú)法在程序中解密的問(wèn)題,因此不推薦在生產(chǎn)中使用這種方法;

第四種,分詞密文映射表

這種方法是對(duì)第二種思路的基礎(chǔ)上進(jìn)行延伸優(yōu)化,也是主流的方法。新建一張分詞密文映射表,在敏感字段數(shù)據(jù)新增、修改的后,對(duì)敏感字段進(jìn)行分詞組合,如“15503770537”的分詞組合有“155”、“0377”、“0537”等,再對(duì)每個(gè)分詞進(jìn)行加密,建立起敏感字段的分詞密文與目標(biāo)數(shù)據(jù)行主鍵的關(guān)聯(lián)關(guān)系;在處理模糊查詢的時(shí)候,對(duì)模糊查詢關(guān)鍵字進(jìn)行加密,用加密后的模糊查詢關(guān)鍵字,對(duì)分詞密文映射表進(jìn)行l(wèi)ike查詢,得到目標(biāo)數(shù)據(jù)行的主鍵,再以目標(biāo)數(shù)據(jù)行的主鍵為條件返回目標(biāo)表進(jìn)行精確查詢。

cc9384c0-037b-11ee-90ce-dac502259ad0.png

圖片一:分組組合加密前

ccc196f8-037b-11ee-90ce-dac502259ad0.png

圖片二:分組組合加密后

這種方法的優(yōu)點(diǎn)就是原理簡(jiǎn)單,實(shí)現(xiàn)起來(lái)也不復(fù)雜,但是有一定的局限性,算是一個(gè)對(duì)性能、業(yè)務(wù)相折中的一個(gè)方案,相比較之下,在能想的方法中,比較推薦這種方法,但是要特別注意的是,對(duì)模糊查詢的關(guān)鍵字的長(zhǎng)度,要在業(yè)務(wù)層面進(jìn)行限制;以手機(jī)號(hào)為例,可以要求對(duì)模糊查詢的關(guān)鍵字是四位或者是五位,具體可以再根據(jù)具體的場(chǎng)景進(jìn)行詳細(xì)劃分。

為什么要增加這樣的限制呢?因?yàn)槊魑募用芎箝L(zhǎng)度為變長(zhǎng),有額外的存儲(chǔ)成本和查詢性能成本,分詞組合越多,需要的存儲(chǔ)空間以及所消耗的查詢性能成本也就更大,并且分詞越短,被硬破解的可能性也就越大,也會(huì)在一定程度上導(dǎo)致安全性降低;

環(huán)境配置

jdk版本:1.8開(kāi)發(fā)工具:Intellij iDEA 2020.1

springboot:2.3.9.RELEASE

mybatis-spring-boot-starter:2.1.4

依賴配置

示例主要用到了SpringAop,加密是對(duì)稱加密,用到了hutool工具包里的加密解密工具類,也可以使用自己封裝的加密解密工具類。


org.springframework.boot
spring-boot-starter-aop


cn.hutool
hutool-all
5.3.3

代碼實(shí)現(xiàn)

1、新建分詞密文映射表;

如果是多個(gè)模糊查詢的字段,可以共用在一張分詞密文映射表中擴(kuò)展多個(gè)字段,以示例中的人員管理功能為例,新建sys_person_phone_encrypt表(人員的手機(jī)號(hào)碼分詞密文映射表),用于存儲(chǔ)人員id與分詞組合密文的映射關(guān)系

createtableifnotexistssys_person_phone_encrypt
(
idbigintauto_incrementcomment'主鍵'primarykey,
person_idintnotnullcomment'關(guān)聯(lián)人員信息表主鍵',
phone_keyvarchar(500)notnullcomment'手機(jī)號(hào)碼分詞密文'
)
comment'人員的手機(jī)號(hào)碼分詞密文映射表';

2、敏感字段數(shù)據(jù)在保存入庫(kù)的時(shí)候,對(duì)敏感字段進(jìn)行分詞組合并加密碼,存儲(chǔ)在分詞密文映射表;

在注冊(cè)人員信息的時(shí)候,先取出通過(guò)AOP進(jìn)行加密過(guò)的手機(jī)號(hào)碼進(jìn)行解密;手機(jī)號(hào)碼解密之后,對(duì)手機(jī)號(hào)碼按照連續(xù)四位進(jìn)行分詞組合,并對(duì)每一個(gè)手機(jī)號(hào)碼的分詞進(jìn)行加密,最后把所有的加密后手機(jī)號(hào)碼分詞拼接成一個(gè)字符串,與人員id一起保存到人員的手機(jī)號(hào)碼分詞密文映射表;

publicPersonregiste(Personperson){
this.personDao.insert(person);
Stringphone=this.decrypt(person.getPhoneNumber());
StringphoneKeywords=this.phoneKeywords(phone);
this.personDao.insertPhoneKeyworkds(person.getId(),phoneKeywords);
returnperson;
}
privateStringphoneKeywords(Stringphone){
Stringkeywords=this.keywords(phone,4);
System.out.println(keywords.length());
returnkeywords;
}

//分詞組合加密
privateStringkeywords(Stringword,intlen){
StringBuildersb=newStringBuilder();
for(inti=0;i

3、模糊查詢的時(shí)候,對(duì)模糊查詢關(guān)鍵字進(jìn)行加密,以加密后的關(guān)鍵字密文為查詢條件,查詢密文映射表,得到目標(biāo)數(shù)據(jù)行的id,再以目標(biāo)數(shù)據(jù)行id為查詢條件,查詢目標(biāo)數(shù)據(jù)表;

根據(jù)手機(jī)號(hào)碼的四位進(jìn)行模糊查詢的時(shí)候,以加密后模糊查詢的關(guān)鍵字為條件,查詢sys_person_phone_encrypt表(人員的手機(jī)號(hào)碼分詞密文映射表),得到人員信息id;再以人員信息id,查詢?nèi)藛T信息表;

publicListgetPersonList(StringphoneVal){
if(phoneVal!=null){
returnthis.personDao.queryByPhoneEncrypt(this.encrypt(phoneVal));
}
returnthis.personDao.queryList(phoneVal);
}

select*fromsys_personwhereidin
(selectperson_idfromsys_person_phone_encrypt
wherephone_keylikeconcat('%',#{phoneVal},'%'))

cd085a98-037b-11ee-90ce-dac502259ad0.png

圖片三:模糊查詢“6666”





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7484

    瀏覽量

    163765
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    762

    瀏覽量

    44117
  • AOP
    AOP
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    11098
  • 加密解密算法
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    1612

原文標(biāo)題:加密后的敏感字段還能進(jìn)行模糊查詢嗎?該如何實(shí)現(xiàn)?

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    有什么方法能使連接外部看門狗還能進(jìn)行程序的升級(jí)?

    單片機(jī)連接外部硬件看門狗,程序下載不了,拆除硬件看門狗,程序就可以下載了。應(yīng)該是程序下載過(guò)程中外狗一直復(fù)位單片機(jī),導(dǎo)致程序下載不了。有什么方法能使連接外部看門狗還能進(jìn)行程序的升級(jí)
    發(fā)表于 09-16 13:48

    加密版C6748不能進(jìn)行io置位嗎?

    接口。那么可不可以像非加密版的6748通過(guò)sfh_OMAP-L138工具進(jìn)行串口燒寫(經(jīng)驗(yàn)證sfh_OMAP-L138工具不能用于加密版芯片)?實(shí)現(xiàn)串口燒寫是否需要開(kāi)發(fā)二次boot來(lái)支
    發(fā)表于 10-14 16:49

    FPGA通過(guò)串口得到數(shù)據(jù) 得到數(shù)據(jù)進(jìn)行加密 無(wú)法得到加密結(jié)果的信號(hào)

    1.可以實(shí)現(xiàn)串口的回環(huán)通信 2.串口接受完信號(hào)發(fā)送一個(gè)信號(hào)給加密模塊進(jìn)行加密 無(wú)法得到
    發(fā)表于 04-01 20:49

    注塑機(jī)被水淹應(yīng)該怎么處理?還能進(jìn)行維修嗎?

    注塑機(jī)被水淹應(yīng)該怎么處理?還能進(jìn)行維修嗎?
    發(fā)表于 11-12 07:43

    怎樣去實(shí)現(xiàn)Stm32在啟用IWDG看門狗還能進(jìn)行休眠呢

    怎樣去實(shí)現(xiàn)Stm32在啟用IWDG看門狗還能進(jìn)行休眠呢?有哪些方法?
    發(fā)表于 01-17 06:04

    基于動(dòng)態(tài)查詢表的模糊控制策略及其應(yīng)用

    研究基于動(dòng)態(tài)查詢表的模糊控制策略及其在轉(zhuǎn)臂式倒立擺中的應(yīng)用Z 采用一種新的倒立擺系統(tǒng)的控制方法, 將傳感器檢測(cè)的倒立擺的兩個(gè)角度信息傳送到控制器, 控制器利用信息的
    發(fā)表于 07-15 09:01 ?22次下載

    Delphi教程之標(biāo)準(zhǔn)/模糊查詢

    Delphi教程之標(biāo)準(zhǔn)/模糊查詢,學(xué)習(xí)Delphi的必備資料。
    發(fā)表于 03-31 11:29 ?2次下載

    MySQL 教程—聯(lián)合查詢

    聯(lián)合查詢:union,將多次查詢(多條select語(yǔ)句)的結(jié)果,在字段數(shù)相同的情況下,在記錄的層次上進(jìn)行拼接。
    發(fā)表于 09-11 12:56 ?5次下載
    MySQL 教程—聯(lián)合<b class='flag-5'>查詢</b>

    面向云數(shù)據(jù)庫(kù)的屬性基加密查詢轉(zhuǎn)換中間件

    針對(duì)云數(shù)據(jù)庫(kù)租戶隱私數(shù)據(jù)的加密查詢問(wèn)題,提出并實(shí)現(xiàn)了一種面向云數(shù)據(jù)庫(kù)的屬性基加密( ABE)和查詢轉(zhuǎn)換服務(wù)中間件。首先,服務(wù)中間件的加解密
    發(fā)表于 01-15 14:45 ?5次下載
    面向云數(shù)據(jù)庫(kù)的屬性基<b class='flag-5'>加密</b>和<b class='flag-5'>查詢</b>轉(zhuǎn)換中間件

    MongoDB引入字段級(jí)數(shù)據(jù)庫(kù)加密安全功能

    MongoDB 引入了一個(gè)全新的安全功能:字段級(jí)數(shù)據(jù)庫(kù)加密。在有了靜態(tài)存儲(chǔ)加密和傳輸加密之后,為什么還要字段
    的頭像 發(fā)表于 04-02 17:56 ?2849次閱讀
    MongoDB引入<b class='flag-5'>字段</b>級(jí)數(shù)據(jù)庫(kù)<b class='flag-5'>加密</b>安全功能

    Oracle:查看所有表和字段、表注釋、字段注釋的步驟

    小伙伴們按照我寫的文章順利安裝好Oracle數(shù)據(jù)庫(kù),又在微信上問(wèn)我:我想查看Oracle數(shù)據(jù)庫(kù)中所有表和字段以及表注釋和字段的注釋,我怎么操作呢?看著小伙伴們這么高的學(xué)習(xí)熱情,這些
    發(fā)表于 08-10 16:21 ?3994次閱讀
    Oracle:查看所有表和<b class='flag-5'>字段</b>、表注釋、<b class='flag-5'>字段</b>注釋的步驟

    一種基于星座模糊的物理層加密方案

    為在物理層中進(jìn)行信息安全傳輸,提出一種基于星座模糊的物理層加密方案。將信道系數(shù)作為密鑰,采用信道系數(shù)與已調(diào)符號(hào)矢量疊加的方式實(shí)現(xiàn)加密。考慮信
    發(fā)表于 04-02 11:13 ?4次下載
    一種基于星座<b class='flag-5'>模糊</b>的物理層<b class='flag-5'>加密</b>方案

    如何對(duì)加密的數(shù)據(jù)進(jìn)行模糊查詢

    我們先來(lái)看看第一個(gè)做法,將所有數(shù)據(jù)加載到內(nèi)存中進(jìn)行解密,這個(gè)如果數(shù)據(jù)量小的話可以使用這個(gè)方式來(lái)做,這樣做既簡(jiǎn)單又實(shí)惠,如果數(shù)據(jù)量大的話那就是災(zāi)難,我們來(lái)大致算一下。
    的頭像 發(fā)表于 08-16 10:14 ?1540次閱讀

    Redis的分頁(yè)+多條件模糊查詢組合實(shí)現(xiàn)方案

    Redis是key-value類型的內(nèi)存數(shù)據(jù)庫(kù),通過(guò)key直接取數(shù)據(jù)雖然很方便,但是并未提供像mysql那樣方便的sql條件查詢支持。因此我們需要借助Redis提供的結(jié)構(gòu)和功能去自己實(shí)現(xiàn)模糊條件
    的頭像 發(fā)表于 11-20 14:26 ?918次閱讀
    Redis的分頁(yè)+多條件<b class='flag-5'>模糊</b><b class='flag-5'>查詢</b>組合<b class='flag-5'>實(shí)現(xiàn)</b>方案

    oracle更新clob字段腳本寫法

    ; BEGIN -- 先查詢要更新的CLOB字段的內(nèi)容 SELECT clob_column INTO clob_var FROM your_table WHERE id = 1 ; -- 修改
    的頭像 發(fā)表于 11-21 11:28 ?3196次閱讀
    主站蜘蛛池模板: 开心片色99xxxx| 一本色道久久综合亚洲精品蜜桃冫| 暖暖视频免费观看社区| 忘忧草下载| 月夜直播免费看| 国产成人精品男人免费| 老湿机一区午夜精品免费福利| 日产2021免费一二三四区在线| 性欧美13处14处破| 24小时日本在线电影| 国产精品免费观看视频播放| 久久久性色精品国产免费观看| 人人啪日日观看在线| 97国产精品久久精品国产| 给我免费播放片bd国语| 女教师二十三岁| 中文乱码35页在线观看| 国产在线中文字幕| 四虎永久免费网址| 国产 欧美 亚洲 日韩视频| 可以看的黄页的网站| 亚洲综合视频| 久久sese| 又黄又爽又无遮挡在线观看免费| 国产人妻XXXX精品HD电影| 色狠狠一区| 国产精品无码亚洲区艳妇| 睡觉被偷偷进入magnet| 国产360激情盗摄全集| 青青视频 在线 在线播放| YELLOW视频在线观看最新| 男人一生要读的书| 扒开粉嫩的小缝末成年小美女| 暖暖免费 高清 日本社区中文| 中文字幕一区中文亚洲| 末成年美女黄网站色大片连接| 中文字幕久久久| 久久久综合中文字幕久久| 乳液全集电影在线观看| 国产午夜婷婷精品无码A片| 亚洲熟女丰满多毛XXXXX|