91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

Android編程精選 ? 來源:Android編程精選 ? 作者:Android編程精選 ? 2022-08-16 10:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

我們知道加密后的數(shù)據(jù)對模糊查詢不是很友好,本篇就針對加密數(shù)據(jù)模糊查詢這個問題來展開講一講實現(xiàn)的思路,希望對大家有所啟發(fā)。

為了數(shù)據(jù)安全我們在開發(fā)過程中經(jīng)常會對重要的數(shù)據(jù)進(jìn)行加密存儲,常見的有:密碼、手機號、電話號碼、詳細(xì)地址、銀行卡號、信用卡驗證碼等信息,這些信息對加解密的要求也不一樣,比如說密碼我們需要加密存儲,一般使用的都是不可逆的慢hash算法,慢hash算法可以避免暴力破解(典型的用時間換安全性)。

在檢索時我們既不需要解密也不需要模糊查找,直接使用密文完全匹配,但是手機號就不能這樣做,因為手機號我們要查看原信息,并且對手機號還需要支持模糊查找,因此我們今天就針對可逆加解密的數(shù)據(jù)支持模糊查詢來看看有哪些實現(xiàn)方式。

在網(wǎng)上隨便搜索了一下,關(guān)于《加密后的模糊查詢》 的帖子很多,順便整理了一下實現(xiàn)的方法,不得不說很多都是不靠譜的做法,甚至有一些沙雕做法,接下來我們就對這些做法來講講實現(xiàn)思路和優(yōu)劣性。

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

我整理了一下對加密的數(shù)據(jù)模糊查詢大致分為三類做法,如下所示:

  • 沙雕做法(不動腦思考直男的思路,只管實現(xiàn)功能從不深入思考問題)
  • 常規(guī)做法(思考了查詢性能問題,也會使用一些存儲空間換性能等做法)
  • 超神做法(比較高端的做法從算法層面上思考)

我們就對這三種實現(xiàn)方法一一來講講實現(xiàn)思路和優(yōu)劣性,首先我們先看沙雕做法。

沙雕做法

  • 將所有數(shù)據(jù)加載到內(nèi)存中進(jìn)行解密,解密后通過程序算法來模糊匹配
  • 將密文數(shù)據(jù)映射一份明文映射表,俗稱tag表,然后模糊查詢tag來關(guān)聯(lián)密文數(shù)據(jù)

沙雕一

我們先來看看第一個做法,將所有數(shù)據(jù)加載到內(nèi)存中進(jìn)行解密,這個如果數(shù)據(jù)量小的話可以使用這個方式來做,這樣做既簡單又實惠,如果數(shù)據(jù)量大的話那就是災(zāi)難,我們來大致算一下。

一個英文字母(不分大小寫)占一個字節(jié)的空間,一個中文漢字占兩個字節(jié)的空間,用DES來舉例,13800138000加密后的串HE9T75xNx6c5yLmS5l4r6Q==占24個字節(jié)。

91a4e1c6-1cf7-11ed-ba43-dac502259ad0.png

輕則上百兆,重則上千兆,這樣分分鐘給應(yīng)用程序整成Out of memory,這樣做如果數(shù)據(jù)少只有幾百、幾千、幾萬條時是完全可以這樣做的,但是數(shù)據(jù)量大就強烈不建議了。

沙雕二

我們再來看第二個做法,將密文數(shù)據(jù)映射一份明文映射表,然后模糊查詢映射表來關(guān)聯(lián)密文數(shù)據(jù),what????。?!那我們?yōu)槭裁匆獙?shù)據(jù)加密呢,直接不加密不是更好么!

我們既然對數(shù)據(jù)加密肯定是有安全訴求才會這樣做,增加一個明文的映射表就違背了安全訴求,這樣做既不安全也不方便完全是脫褲子放x,多此一舉,強且不推薦。

常規(guī)做法

我們接下來看看常規(guī)的做法,也是最廣泛使用的方法,此類方法及滿足的數(shù)據(jù)安全性,又對查詢友好。

  • 在數(shù)據(jù)庫實現(xiàn)加密算法函數(shù),在模糊查詢的時候使用decode(key) like '%partial%
  • 對密文數(shù)據(jù)進(jìn)行分詞組合,將分詞組合的結(jié)果集分別進(jìn)行加密,然后存儲到擴展列,查詢時通過key like '%partial%'

常規(guī)一

在數(shù)據(jù)庫中實現(xiàn)與程序一致的加解密算法,修改模糊查詢條件,使用數(shù)據(jù)庫加解密函數(shù)先解密再模糊查找,這樣做的優(yōu)點是實現(xiàn)成本低,開發(fā)使用成本低,只需要將以往的模糊查找稍微修改一下就可以實現(xiàn),但是缺點也很明顯,這樣做無法利用數(shù)據(jù)庫的索引來優(yōu)化查詢,甚至有一些數(shù)據(jù)庫可能無法保證與程序?qū)崿F(xiàn)一致的加解密算法,但是對于常規(guī)的加解密算法都可以保證與應(yīng)用程序一致。

如果對查詢性能要求不是特別高、對數(shù)據(jù)安全性要求一般,可以使用常見的加解密算法比如說AES、DES之類的也是一個不錯的選擇。

如果公司有自己的算法實現(xiàn),并且沒有提供多端的算法實現(xiàn),要么找個算法好的人去研究吃透補全多端實現(xiàn),要么放棄使用這個辦法。

常規(guī)二

對密文數(shù)據(jù)進(jìn)行分詞組合,將分詞組合的結(jié)果集分別進(jìn)行加密,然后存儲到擴展列,查詢時通過key like '%partial%',這是一個比較劃算的實現(xiàn)方法,我們先來分析一下它的實現(xiàn)思路。

先對字符進(jìn)行固定長度的分組,將一個字段拆分為多個,比如說根據(jù)4位英文字符(半角),2個中文字符(全角)為一個檢索條件,舉個例子:

ningyu1使用4個字符為一組的加密方式,第一組ning ,第二組ingy ,第三組ngyu ,第四組gyu1 … 依次類推。

如果需要檢索所有包含檢索條件4個字符的數(shù)據(jù)比如:ingy ,加密字符后通過 key like “%partial%” 查庫。

我們都知道加密后長度會增長,增長的這部分長度存儲就是我們要花費的額外成本,典型的使用成本來換取速度,密文增長的幅度隨著算法不同而不同以DES舉例,13800138000加密前占11個字節(jié),加密后的串HE9T75xNx6c5yLmS5l4r6Q==占24個字節(jié),增長是2.18倍,所以一個優(yōu)秀的算法是多么的重要,能為公司節(jié)省不少成本,但是話又說回來算法工程師的工資也不低,所以我也不知道是節(jié)省成本還是增加成本,哈哈哈…你們自己算吧。

回到主題,這個方法雖然可以實現(xiàn)加密數(shù)據(jù)的模糊查詢,但是對模糊查詢的字符長度是有要求的,以我上面舉的例子模糊查詢字符原文長度必須大于等于4個英文/數(shù)字,或者2個漢字,再短的長度不建議支持,因為分詞組合會增多從而導(dǎo)致存儲的成本增加,反而安全性降低。

大家是否都對接過 淘寶、拼多多、JD他們的api,他們對平臺訂單數(shù)據(jù)中的用戶敏感數(shù)據(jù)就是加密的同時支持模糊查詢,使用就是這個方法,下面我整理了幾家電商平臺的密文字段檢索方案的說明,感興趣的可以查看下面鏈接。

  • 淘寶密文字段檢索方案:https://open.taobao.com/docV3.htm?docId=106213&docType=1

  • 阿里巴巴文字段檢索方案:https://jaq-doc.alibaba.com/docs/doc.htm?treeId=1&articleId=106213&docType=1

  • 拼多多密文字段檢索方案:https://open.pinduoduo.com/application/document/browse?idStr=3407B605226E77F2

  • 京東密文字段檢索方案:https://jos.jd.com/commondoc?listId=345

ps. 基本上都是一樣的,果然都是互相抄襲,連加密后的數(shù)據(jù)格式都一致。

這個方法優(yōu)點就是實現(xiàn)起來不算復(fù)雜,使用起來也較為簡單,算是一個折中的做法,因為會有擴展字段存儲成本會有升高,但是可利用數(shù)據(jù)庫索引優(yōu)化查詢速度,推薦使用這個方法。

超神做法

我們接下來看看優(yōu)秀的做法,此類做法難度較高,都是從算法層面來考慮,有些甚至?xí)O(shè)計一個新算法,雖然已有一些現(xiàn)成的算法參考,但是大多都是半成品無法拿來直接使用,所以還是要有人去深入研究和整合到自己的應(yīng)用中去。

從算法層面思考,甚至?xí)O(shè)計一個新算法來支持模糊查找

這個層面大多是專業(yè)算法工程師的研究領(lǐng)域,想要設(shè)計一個有序的、非不可逆的、密文長度不能增長過快的算法不是一件簡單的事情,大致的思路是這樣的,使用譯碼的方式進(jìn)行加解密,保留密文和原文一樣的順序,從而支持密文模糊匹配,說的比較籠統(tǒng)因為我也不是這方面的專家沒有更深一步的研究過,所以我從網(wǎng)上找了一些資料可以參考一下。

  • 數(shù)據(jù)庫中字符數(shù)據(jù)的模糊匹配加密方法:https://www.jiamisoft.com/blog/6542-zifushujumohupipeijiamifangfa.html

這里提到的Hill密碼處理和模糊匹配加密方法FMES可以重點看看.

  • 一種基于BloomFilter的改進(jìn)型加密文本模糊搜索機制研究:http://kzyjc.cnjournals.com/html/2019/1/20190112.htm

  • 支持快速查詢的數(shù)據(jù)庫如何加密:https://www.jiamisoft.com/blog/5961-kuaisuchaxunshujukujiami.html

  • 基于Lucene的云端搜索與密文基礎(chǔ)上的模糊查詢:https://www.cnblogs.com/arthurqin/p/6307153.html

基于Lucene的思路就跟我們上面介紹的常規(guī)做法二類似,對字符進(jìn)行等長度分詞,將分詞后的結(jié)果集加密后存儲,只不過存儲的db不一樣,一個是關(guān)系型數(shù)據(jù)庫,一個是es搜索引擎。

  • 云存儲中一種支持可驗證的模糊查詢加密方案:http://jeit.ie.ac.cn/fileDZYXXXB/journal/article/dzyxxxb/2017/7/PDF/160971.pdf

總結(jié)

我們到這里對加密數(shù)據(jù)的檢索方案全部介紹完了,我們首先提到的是網(wǎng)上搜索隨處可見的沙雕做法,在這里也講了不推薦使用這些沙雕做法,盡量使用常規(guī)做法,如果公司有專業(yè)算法方向人才的話不妨可以考慮基于算法層面的超神做法。

總的來說從投入、產(chǎn)出比、及實現(xiàn)、使用成本來算的話常規(guī)做法二是非常推薦的。
審核編輯 :李倩


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

    關(guān)注

    8

    文章

    7335

    瀏覽量

    94801
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4784

    瀏覽量

    98088
  • 加密
    +關(guān)注

    關(guān)注

    0

    文章

    320

    瀏覽量

    24707

原文標(biāo)題:被問懵了,加密后的數(shù)據(jù)如何進(jìn)行模糊查詢?

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    CW32 UART查詢方式接收數(shù)據(jù)編程的示例

    標(biāo)志位; 步驟 9:設(shè)置 UARTx_CR1.RXEN 為 1 使能接收; 步驟 10:查詢等待 UARTx_ISR.RC 標(biāo)志位置 1,確認(rèn)接收完一幀數(shù)據(jù) ; 步驟 11:查詢錯誤標(biāo)志
    發(fā)表于 12-16 08:19

    電能質(zhì)量在線監(jiān)測裝置數(shù)據(jù)日志能加密存儲嗎?

    電能質(zhì)量在線監(jiān)測裝置的數(shù)據(jù)日志 可以加密存儲 ,且已成為工業(yè)級與電力系統(tǒng)合規(guī)應(yīng)用的標(biāo)準(zhǔn)配置。加密機制通常采用 分級加密策略 ,并結(jié)合硬件安全模塊保障密鑰安全,確保日志
    的頭像 發(fā)表于 12-05 10:16 ?619次閱讀
    電能質(zhì)量在線監(jiān)測裝置<b class='flag-5'>數(shù)據(jù)</b>日志能<b class='flag-5'>加密</b>存儲嗎?

    硬件加密引擎在保障數(shù)據(jù)安全方面有哪些優(yōu)勢呢?

    硬件加密引擎作為芯源半導(dǎo)體安全芯片的核心組件,在保障數(shù)據(jù)安全方面憑借硬件級的設(shè)計與優(yōu)化,相比軟件加密方案具有多維度優(yōu)勢,具體如下: 1. 加密運算效率更高,實時性更強 硬件級并行處理:
    發(fā)表于 11-17 06:47

    電能質(zhì)量在線監(jiān)測裝置的數(shù)據(jù)在云端是如何加密的?

    電能質(zhì)量在線監(jiān)測裝置的數(shù)據(jù)在云端的加密過程覆蓋 傳輸、存儲、密鑰管理 全鏈條,結(jié)合行業(yè)標(biāo)準(zhǔn)與前沿技術(shù)構(gòu)建多層次防護體系,具體實現(xiàn)方式如下: 一、傳輸加密:端到端防護防止數(shù)據(jù)竊取 基礎(chǔ)
    的頭像 發(fā)表于 10-30 09:42 ?330次閱讀

    加密算法指令設(shè)計

    四個字空間 custom_camellia192_enc:從內(nèi)存load明文數(shù)據(jù)data[4]進(jìn)協(xié)處理器data_in緩存,大小為四個字空間,然后進(jìn)行密鑰長度為128bit的camellia加密運算
    發(fā)表于 10-28 07:36

    加密算法的應(yīng)用

    機。但是,由于加密技術(shù)的保密性,直到二戰(zhàn)結(jié)束,人們才開始研究加密技術(shù)的理論,進(jìn)一步推動了加密技術(shù)的發(fā)展。 2. 加密算法的含義
    發(fā)表于 10-24 08:03

    AES加密流程

    44個128bit密鑰。密鑰擴展算法如下: 其中Nk代表加密輪數(shù)。 經(jīng)過多輪的加密處理,最終得到的加密數(shù)據(jù)即為AES
    發(fā)表于 10-23 06:13

    AES加密模式簡介與對比分析

    能導(dǎo)致解密的明文中包含錯誤的數(shù)據(jù)。 圖3 CFB模式 4. 輸出反饋模式 (OFB): OFB模式類似于CFB模式,但它將前一個輸出塊作為當(dāng)前加密函數(shù)的輸入。其流程如圖4所示
    發(fā)表于 10-22 08:21

    溫度循環(huán)測試如何進(jìn)行數(shù)據(jù)記錄和分析?

    溫度循環(huán)測試數(shù)據(jù)記錄和分析是驗證電能質(zhì)量在線監(jiān)測裝置精度穩(wěn)定性、功能完整性、硬件可靠性的核心環(huán)節(jié),需圍繞 “數(shù)據(jù)溯源可查、分析邏輯閉環(huán)、結(jié)論依據(jù)充分” 展開,結(jié)合測試標(biāo)準(zhǔn)(IEC
    的頭像 發(fā)表于 09-26 14:22 ?542次閱讀

    基于FPGA利用sm4進(jìn)行實時圖像加密

    求一份在fpga上利用sm4進(jìn)行實時圖像加密的文件
    發(fā)表于 09-15 19:05

    請問如何使用ICP工具對NUC505進(jìn)行加密編程?

    如何使用ICP工具對NUC505進(jìn)行加密編程?
    發(fā)表于 08-18 07:18

    Intel? Ethernet E830 控制器:引領(lǐng)量子加密時代的網(wǎng)絡(luò)安全解決方案

    Intel? Ethernet 830 Controllers,其采用安全啟動、安全固件升級和雙硬件信任根等安全技術(shù),通過符合 CNSA 1.0 和 FIPS 140-3 1 級的量子加密 (PQC) 解決方案以應(yīng)對未來的數(shù)據(jù)
    的頭像 發(fā)表于 08-11 17:55 ?6988次閱讀
    Intel? Ethernet E830 控制器:引領(lǐng)<b class='flag-5'>后</b>量子<b class='flag-5'>加密</b>時代的網(wǎng)絡(luò)安全解決方案

    基于SM4的文件加密解密功能實現(xiàn)(ECB模式)

    的是hex那么在入?yún)⒌臅r候也需要將hex轉(zhuǎn)換成unit8Array類型要匹配” “不能輸出的是hex解密的時候又傳入了base64但是還用hex格式解” 然后再回頭自己的代碼 我是把加密數(shù)據(jù),直接
    發(fā)表于 06-29 13:21

    數(shù)據(jù)數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫被加密如何恢復(fù)數(shù)據(jù)?

    SQL Server數(shù)據(jù)庫故障: SQL Server數(shù)據(jù)庫被加密,無法使用。 數(shù)據(jù)庫MDF、LDF、log日志文件名字被篡改。
    的頭像 發(fā)表于 06-25 13:54 ?688次閱讀
    <b class='flag-5'>數(shù)據(jù)</b>庫<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—SQL Server<b class='flag-5'>數(shù)據(jù)</b>庫被<b class='flag-5'>加密</b>如何恢復(fù)<b class='flag-5'>數(shù)據(jù)</b>?

    如何在MBDT中使用S32k344進(jìn)行加密?

    我想加密和解密通過 CAN 總線發(fā)送的數(shù)據(jù),為此我想使用 S32k344 中的 HSE 模塊在 MBDT 1.5 中進(jìn)行對稱加密-解密,但工具箱中沒有可用的塊。那我該怎么做呢。請分享與
    發(fā)表于 03-25 07:21