亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種面向數(shù)據(jù)庫加密字段模糊檢索的密文索引方法與流程

文檔序號:12719975閱讀:1157來源:國知局
一種面向數(shù)據(jù)庫加密字段模糊檢索的密文索引方法與流程
本發(fā)明涉及一種面向數(shù)據(jù)庫加密字段模糊檢索的密文索引方法,屬于信息安全以及數(shù)據(jù)庫加密
技術(shù)領(lǐng)域
。
背景技術(shù)
:數(shù)據(jù)庫安全日益重要,對數(shù)據(jù)庫中的敏感字段進行加密是有效的安全手段。對字符型字段進行加密后,如果需要對內(nèi)容使用LIKE操作符進行模糊檢索,就必須將原內(nèi)容解密后再進行匹配,這樣效率會非常低,從而影響到數(shù)據(jù)庫的可用性。目前還未見對字符型加密字段的模糊檢索索引的研究成果。本發(fā)明的目的是致力于解決上述字符型字段進行加密后使用LIKE操作符進行模糊檢索效率太低的問題,提出一種面向數(shù)據(jù)庫加密字段模糊檢索的密文索引方法。技術(shù)實現(xiàn)要素:本發(fā)明的目的是針對現(xiàn)有數(shù)據(jù)庫加密索引技術(shù)存在的對字符型加密字段進行模糊檢索運行效率低的技術(shù)缺陷,提出一種面向數(shù)據(jù)庫加密字段模糊檢索的密文索引方法。本發(fā)明的原理是使用被加密字段明文的K-GRAM片段計算哈希值,并重組作為密文索引,該索引保存了原文的部分字符特征,但是不能從索引推斷回原文??梢酝ㄟ^該索引過濾掉大量的不匹配記錄,從而大大降低需要解密進行模糊匹配的記錄數(shù),從而提升了對加密字段進行模糊查詢的性能。本發(fā)明的目的是通過以下技術(shù)方案實現(xiàn)的:一種面向數(shù)據(jù)庫加密字段模糊檢索的密文索引方法,包括以下內(nèi)容:首先對待加密的字段C,增加模糊檢索索引字段IC。然后對C所在的表T的每個記錄,生成字段C的索引字段IC的內(nèi)容:(一)、記待索引字段內(nèi)容為字符串P,索引建立過程具體步驟如下:(1)在P的首尾添加標(biāo)記符,標(biāo)記出數(shù)據(jù)的開始和結(jié)束,記添加標(biāo)記后的字符串為P1;(2)以長度為K對P1進行子串拆分,得到K-GRAM集合M1,M1包含P1的長度為K的所有子串;(3)對集合M1中的重復(fù)串進行合并,得到子串集合M2;(4)對M2中的每個子串計算哈希值,并進行排序,得到哈希值集合H1;(5)對H1中的所有哈希值按順序拼接,得到一個新的字符串IDX,此IDX即為P的索引值;(6)返回索引值IDX。(二)、記進行模糊檢索的查詢條件為S,該字符串可能包含任意關(guān)鍵字以及通配符,記被檢索的當(dāng)前記錄的加密字段的內(nèi)容為C,C的密文索引值為IDX1,匹配過程具體步驟如下:(1)在S的首尾添加標(biāo)記符,標(biāo)記出數(shù)據(jù)的開始和結(jié)束,記添加標(biāo)記后的字符串為S1;(2)以長度為K對S1進行子串拆分,得到K-GRAM集合M1,M1包含S1的長度為K的所有子串,拆分時遇到通配符則跳過重新開始拆分;(3)對集合M1中的重復(fù)串進行合并,得到子串集合M2;(4)對M2中的每個子串計算哈希值,得到哈希值集合H1;(5)對H1中的所有哈希值進行排序并按順序拼接得到一個新的字符串S1;(6)將S1與待匹配的字符串C的索引值IDX1進行匹配,如果匹配成功,則轉(zhuǎn)到(7),如果匹配失敗,則說明C不滿足模糊匹配條件S,返回失敗;(7)將C解密,得到明文C1,在C1上使用查詢條件S進行精確匹配,并返回匹配結(jié)果。作為優(yōu)選,所述步驟(6)將S1與待匹配的字符串C的索引值IDX1進行匹配的過程如下:(1)計算S1的子串個數(shù)M。M=S1的長度/L,L為所采用的每個K-GRAM的哈希值的長度;(2)設(shè)置匹配次數(shù)n=0;(3)設(shè)置IDX1的當(dāng)前子串為第一個子串,設(shè)置S1的當(dāng)前子串為第一個子串;(4)如果IDX1和S1的當(dāng)前子串相等,n加1,IDX1和S1都將當(dāng)前子串設(shè)置為后一個字串;否則,如果IDX1的當(dāng)前子串大于S1的當(dāng)前子串,則S1的當(dāng)前子串置為下一個子串;反之,則IDX1的當(dāng)前子串置為下一個子串;(5)重復(fù)(4),直到IDX1或者S1結(jié)束;(6)如果n等于M,即發(fā)生了M次匹配,則返回匹配成功,否則返回匹配失敗。作為優(yōu)選,所述步驟(二)、(5)對H1中的所有哈希值進行排序并按順序拼接,拼接時在各哈希值之間添加通配符“%”;所述步驟(二)、(6)對將S1與待匹配的字符串C的索引值IDX1進行匹配為使用數(shù)據(jù)庫的LIKE操作符將S1與IDX1進行匹配。由于采用了HASH算法,HASH算法本身具有沖突性質(zhì),也就是多個不同的原文可能生成一個相同的哈希值,并且本專利對哈希值進行了去重、排序、合并等操作,才得到索引值,所以從索引值并不能逆向的還原出原文,保證了算法的安全。而在匹配過程中,通過哈希值過濾掉了絕大多數(shù)的候選記錄,僅對索引值匹配成功的記錄解密,進行精確匹配,從而保證了很高的性能。有益效果一種面向數(shù)據(jù)庫加密字段模糊檢索的密文索引方法,具有如下增益效果:(1)能夠?qū)ψ址妥侄谓⑨槍δ:龣z索的索引,加速對加密字段的檢索性能;(2)基于哈希函數(shù)生成密文索引,由于哈希函數(shù)具有沖突性質(zhì),所以從索引值并不能逆向的還原出原文,保證了算法的安全。附圖說明圖1是本發(fā)明一種面向數(shù)據(jù)庫加密字段模糊檢索的密文索引方法建立索引階段流程示意圖;圖2是本發(fā)明一種面向數(shù)據(jù)庫加密字段模糊檢索的密文索引方法檢索階段流程示意圖;圖3是本發(fā)明一種面向數(shù)據(jù)庫加密字段模糊檢索的密文索引方法索引匹配過程示意圖。具體實施方式下面結(jié)合附圖和實施例對本發(fā)明做進一步說明和詳細(xì)描述。實施例1本實施例詳細(xì)闡述了應(yīng)用本發(fā)明一種面向數(shù)據(jù)庫加密字段模糊檢索的密文索引建立過程的一個具體實例。設(shè)待索引字段內(nèi)容為字符串P=ABCABD,如圖1所示,索引建立過程具體步驟如下:(1)在P的首尾添加標(biāo)記符,本例中使用符號$作為標(biāo)記符,表示數(shù)據(jù)的開始和結(jié)束,得到P1=$ABCABD$;當(dāng)然,本領(lǐng)域技術(shù)人員亦可使用其它的標(biāo)記符進行標(biāo)記;(2)設(shè)置K=2,使用2-GRAM對P1進行拆分,得到對應(yīng)的所有2-GRAM項集合為M1={$A、AB、BC、CA、AB、BD、D$};(3)對M1中的元素去重,得到集合M2={$A、AB、BC、CA、BD、D$};(4)對M2中的每一元素,我們計算其哈希值。以AB為例,其哈希值為(ASCII(A)*ASCII(B))MODM||(ASCII(A)+ASCII(B))MODN。其中,ASCII(X)為取字符X的ASCII碼值,MOD為取模運算,||代表字符串拼接符號,M、N為參數(shù)。在此實施例中,我們將M取為100,N取為10。經(jīng)過計算,我們得到所有元素的哈希值,并對這些哈希值進行排序,得到集合H1={9203、0605、0202、0306、0008、0006};(5)將H1中的元素按從小到大的順序拼接,即可得到數(shù)據(jù)P的索引值IDX=000600080202030606059203;(6)返回IDX。正如本領(lǐng)域技術(shù)人員公知的,此處的哈希函數(shù)可以替換為任何其他的哈希函數(shù),以生成哈希值。實施例2本實施例詳細(xì)闡述了本發(fā)明一種面向數(shù)據(jù)庫加密字段模糊檢索的密文索引匹配過程的一個具體實例。設(shè)進行模糊檢索的查詢條件為S=A%BD,設(shè)被檢索的密文為F,F(xiàn)的密文索引值為IDX1,如圖2所示,匹配過程具體步驟如下:(1)在S首尾添加標(biāo)記符,本例中就使用$,表示數(shù)據(jù)的開始和結(jié)束,得到S1=$A%BD$;(2)使用2-GRAM對S1進行拆分,遇到通配符%則跳過重新開始拆分,得到所有2-GRAM項為集合M1={$A、BD、D$};(3)對集合M1進行去重,本例中去重后結(jié)果仍為M2={$A、BD、D$};(4)對M2中的每一項2-GRAM,我們計算其哈希值。以$A為例,其哈希值為(ASCII($)*ASCII(A))MODM||(ASCII($)+ASCII(A))MODN。其中,ASCII(X)為取字符X的ASCII碼值,MOD為取模運算,“||”代表字符串拼接符號,M、N為參數(shù)。在此實施例中,我們將M取為100,N取為10。經(jīng)過計算,我們得到所有去重后的2-GRAM項的哈希值,并將所有哈希值進行排序并去重,得到一個新的哈希值集合,即H1={0006,0008,9203};(5)對H1的元素按從小到大的順序拼接,元素之間采用%進行連接,即可得到S的查詢哈希值,S1=0006%0008%9203;(6)使用數(shù)據(jù)庫自身的LIKE操作符,S1與IDX1進行匹配,如果匹配成功,則到(7),如果匹配失敗,則說明F不滿足模糊匹配條件S,返回失敗;(7)將F解密,得到明文F1,在F1上使用查詢條件S進行搜索,并返回匹配結(jié)果。實施例3本實施例詳細(xì)闡述了本發(fā)明一種面向數(shù)據(jù)庫加密字段模糊檢索的密文索引在ORACLE數(shù)據(jù)庫上的一個具體實例。如表1所示是本實施例中原有加密前的數(shù)據(jù)表T1。其中包括兩個字段C1和C2,并且已有一些記錄。字段ROWID為ORACLE系統(tǒng)提供的偽列,其值表示每個記錄的物理位置,也是被加密記錄的唯一性標(biāo)識。C1為字符型字段,為敏感字段,需要對其進行加密。表1:T1ROWIDC1C21ABCABD1首先,針對于上述表T1,將字段C1重命名為EC1,EC1中保存原C1明文加密后的密文,在T1中增加密文索引字段IDX_C1,用于保存C1的密文索引值,如表2所示:表2:加密后的表T1ROWIDEC1IDX_C1C21E(ABCABD)0006000802020306060592031然后,根據(jù)實施例1生成字段C1的索引值,并填充IDX_C1字段。設(shè)進行模糊檢索的查詢條件為S=A%BD根據(jù)實施例2計算S的索引哈希值為S1=0006%0008%9203,則原先在未加密表上的模糊條件查詢:SELECTC1,C2FROMT1WHEREC1LIKE‘A%BD’;可以通過改寫SQL請求,使用如下模糊條件查詢替換上述語句:SELECTDEC(EC1)ASC1,C2FROMT1WHEREIDX_C1LIKE‘0006%0008%9203’ANDDEC(EC1)LIKE‘A%BD’;數(shù)據(jù)庫執(zhí)行如上語句時,數(shù)據(jù)庫系統(tǒng)首先使用將查詢索引值‘0006%0008%9203’與密文索引字段IDX_C1進行匹配,如果匹配成功,再將EC1解密結(jié)果與真實查詢條件‘A%BD’進行匹配。在本實施例中,記錄1將會被匹配成功且被返回。當(dāng)數(shù)據(jù)表中的記錄很多時,可以通過條件“IDX_C1LIKE‘0006%0008%9203’”過濾掉很多不匹配的記錄,從而大大減少性能損耗。實施例4本實施例詳細(xì)闡述了本發(fā)明一種面向數(shù)據(jù)庫加密字段模糊檢索的密文索引在ORACLE數(shù)據(jù)庫上的另一種具體實施方案。本實施方案是通過使用Oracle的擴展索引機制實現(xiàn)的。如表3所示是本實施例中原有加密前的數(shù)據(jù)表T1。其中包括兩個字段C1和C2,并且已有一些記錄。字段ROWID為ORACLE系統(tǒng)提供的偽列,其值表示每個記錄的物理位置,也是被加密記錄的唯一性標(biāo)識。C1為字符型字段,為敏感字段,需要對其進行加密。表3:T1ROWIDC1C21ABCABD1首先,針對于上述表T1,將字段C1重命名為EC1,EC1中保存原C1明文加密后的密文,在T1中增加密文索引字段IDX_C1,用于保存C1的密文索引值,如表4所示:表4:加密后的表T1ROWIDEC1IDX_C1C21E(ABCABD)0006000802020306060592031然后,根據(jù)實施例1生成字段C1的索引值,并填充IDX_C1字段。然后,正如本領(lǐng)域技術(shù)人員公知的,為T1的加密列EC1創(chuàng)建擴展索引,并使用CREATEOPERATOR語句創(chuàng)建MY_LIKE()函數(shù),并將其與擴展索引類型進行綁定。當(dāng)在SQL語句中調(diào)用MYLIKE()函數(shù)時,系統(tǒng)將按照用戶自定義索引來執(zhí)行數(shù)據(jù)的查找操作。添加上述擴展索引后,數(shù)據(jù)查詢操作的執(zhí)行過程如下:(1)當(dāng)用戶調(diào)用模糊條件查詢語句:SELECTC1,C2FROMT1WHEREC1LIKE‘A%BD’;從表T1中查詢數(shù)據(jù)時,擴展索引使用實施例2計算查詢條件S=A%BD的索引哈希值為S1=0006%0008%9203;(2)擴展索引內(nèi)部使用語句:SELECTROWIDFROMT1WHEREIDX_C1LIKE‘0006%0008%9203’ANDDEC(EC1)LIKE‘A%BD’;數(shù)據(jù)庫執(zhí)行如上語句時,數(shù)據(jù)庫系統(tǒng)首先使用將查詢索引值‘0006%0008%9203’與密文索引字段IDX_C1進行匹配,如果匹配成功,再將EC1解密結(jié)果與真實查詢條件‘A%BD’進行匹配。在本實施例中,記錄1將會被匹配成功且被返回。當(dāng)數(shù)據(jù)表中的記錄很多時,可以通過條件“IDX_C1LIKE‘0006%0008%9203’”過濾掉很多不匹配的記錄,從而大大減少性能損耗。實施例5本實施例詳細(xì)闡述了本發(fā)明一種面向數(shù)據(jù)庫加密字段模糊檢索索引方法的另一種密文索引匹配過程的具體實例:設(shè)數(shù)據(jù)索引值為IDX1,本例設(shè)其具體值為:000600080202030606059203。設(shè)查詢條件為S=‘A%BD’。根據(jù)實施例2計算S的密文索引查詢條件。在實施例2步驟(5)中,對H1的元素按從小到大的順序拼接。正如本領(lǐng)域技術(shù)人員公知的,元素之間不采用%而直接進行連接,即可得到S的查詢哈希值,S1=000600089203;設(shè)所采用的每個K-GRAM的哈希值的長度L為4,則匹配過程如圖3所示,具體如下:(1)計算S1的子串個數(shù),記為M,M=S1的長度/4=12/4=3;(2)設(shè)置匹配成功次數(shù)n=0;(3)設(shè)置IDX1的當(dāng)前子串為第一個子串“0006”,設(shè)置S1的當(dāng)前子串為第一個子串“0006”;(4)IDX1和S1的當(dāng)前子串相等,n加1等于1,IDX1和S1都指向下一個子串;(5)IDX1和S1的當(dāng)前子串相等,都為“0008”,n加1等于2,IDX1和S1都指向下一個子串;(5)IDX1當(dāng)前字串為“0202”,小于S1的當(dāng)前子串為“9203”,IDX1的當(dāng)前子串置為下一個子串,重復(fù)(5)直到IDX2的當(dāng)前子串為“9203”;(6)IDX1和S1的當(dāng)前子串相等,都為“9203”,n加1等于3,IDX1和S1都指向結(jié)束;(7)此時n等于3,也即等于S1的子串個數(shù)M,本次匹配成功。以上所述為本發(fā)明的較佳實施例而已,本發(fā)明不應(yīng)該局限于該實施例和附圖所公開的內(nèi)容。凡是不脫離本發(fā)明所公開的思想下完成的等效或修改,都落入本發(fā)明保護的范圍。當(dāng)前第1頁1 2 3 
當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1