本發(fā)明涉及計算機信息安全領域,尤其涉及一種創(chuàng)建密文索引的方法、裝置及系統。
背景技術:
:在大數據平臺或公有云平臺中,為了防止個人敏感數據(手機號碼、家庭住址、身份證號碼、護照號和/或銀行賬號等)被非法訪問,需要對個人敏感數據進行加密存儲,由于對個人敏感數據進行加密后得到的密文以亂碼的形式被存儲,無法直接進行搜索,因此,出現了基于關鍵詞索引的密文搜索技術。一般情況下,基于關鍵詞索引的密文搜索技術包括創(chuàng)建索引階段和搜索匹配階段,一種創(chuàng)建索引的方法包括:采用中文分詞算法將中文敏感數據進行分詞,得到N個關鍵詞;對N個關鍵詞中的每個關鍵詞計算基于拼音的編輯距離,得到N個編輯距離;將N個編輯距離中的每個編輯距離和密鑰作為HMAC(Hash-basedMessageAuthenticationCode,哈希消息認證碼)算法的輸入,計算得到N個哈希認證碼;將N個哈希認證碼作為中文敏感數據的N個索引;采用加密算法將中文敏感數據進行加密,得到中文敏感數據的密文;將N個索引與該密文一同存儲在數據庫服務器中。采用上述方法生成的密文的索引,不能用于在數據庫服務器中直接搜索該密文,因此,使得密文搜索的速度較慢。技術實現要素:本發(fā)明的實施例提供一種創(chuàng)建密文索引的方法、裝置及系統,用以提高密文搜索的速度。為達到上述目的,本發(fā)明的實施例采用如下技術方案:第一方面,提供一種創(chuàng)建密文索引的方法,包括:采用可逆加密算法對敏感數據進行加密得到所述敏感數據的密文;采用分詞算法對所述敏感數據進行分詞得到目標關鍵詞;根據所述目標關鍵詞和哈希算法,生成哈希認證碼;采用預設編碼方式對所述哈希認證碼進行編碼得到索引字符串,所述索引字符串為可打印字符串,所述索引字符串為所述密文的索引;向數據庫服務器發(fā)送所述密文和所述索引字符串,以便于所述數據庫服務器將所述密文和所述索引字符串存儲在同一數據表中,所述索引字符串與所述密文是對應存儲的。結合第一方面,在第一種可能的實現方式中,在所述采用預設編碼方式對所述哈希認證碼進行編碼得到索引字符串之前,所述方法還包括:截取所述哈希認證碼的前r位,得到子哈希認證碼,1≤r≤R,R和r均為整數,R為所述哈希認證碼的長度;所述采用預設編碼方式對所述哈希認證碼進行編碼得到索引字符串,包括:采用預設編碼方式對所述子哈希認證碼進行編碼得到索引字符串。結合第一方面或第一方面的第一種可能的實現方式,在第二種可能的實現方式中,當所述索引字符串的個數為N時,在所述采用預設編碼方式對所述哈希認證碼進行編碼得到索引字符串之后,所述方法還包括:將N個索引字符串隨機置亂,N≥1,N為整數;將隨機置亂后的所述N個索引字符串串連起來,串連后的所述N個索引字符串中的相鄰的索引字符串之間通過非所述預設編碼方式中的可打印字符間隔開。結合第一方面、第一方面的第一種可能的實現方式或第二種可能的實現方式,在第三種可能的實現方式中,所述方法還包括:獲取搜索關鍵詞;采用將所述目標關鍵詞生成所述索引字符串的相同方法,將所述搜索關鍵詞生成搜索字符串,所述搜索字符串為可打印字符串;向所述數據庫服務器發(fā)送所述搜索字符串,以便于所述數據庫服務器根據所述搜索字符串和存儲的所述索引字符串搜索所述密文。結合第一方面的第三種可能的實現方式,在第四種可能的實現方式中,在所述獲取搜索關鍵詞之前,所述方法還包括:獲取搜索語句;所述獲取搜索關鍵詞,包括:采用所述分詞算法對所述搜索語句進行分詞得到搜索關鍵詞。結合第一方面的第三種可能的實現方式或第四種可能的實現方式,在第五種可能的實現方式中,所述方法還包括:所述數據庫服務器接收M個搜索字符串,當M≥2時,所述數據庫服務器還獲取搜索方式,所述搜索方式為與方式或者或方式;所述數據庫服務器將所述M個搜索字符串與存儲的所述索引字符串進行匹配;若M=1,獲取與所述搜索字符串相同的索引字符串對應的密文;若M≥2、且所述搜索方式為與方式時,獲取與所述M個搜索字符串相同的M個索引字符串所對應的密文;若M≥2、且所述搜索方式為或方式時,獲取與所述M個搜索字符串中任一搜索字符串相同的索引字符串所對應的密文。第二方面,提供一種創(chuàng)建密文索引的裝置,包括:加密單元,用于采用可逆加密算法對敏感數據進行加密得到所述敏感數據的密文;分詞單元,用于采用分詞算法對所述敏感數據進行分詞得到目標關鍵詞;第一生成單元,用于根據所述目標關鍵詞和哈希算法,生成哈希認證碼;編碼單元,用于采用預設編碼方式對所述哈希認證碼進行編碼得到索引字符串,所述索引字符串為可打印字符串,所述索引字符串為所述密文的索引;發(fā)送單元,用于向數據庫服務器發(fā)送所述密文和所述索引字符串,以 便于所述數據庫服務器將所述密文和所述索引字符串存儲在同一數據表中,所述索引字符串與所述密文是對應存儲的。結合第二方面,在第一種可能的實現方式中,所述裝置還包括:截取單元,用于截取所述哈希認證碼的前r位,得到子哈希認證碼,1≤r≤R,R和r均為整數,R為所述哈希認證碼的長度;所述編碼單元,具體用于采用預設編碼方式對所述子哈希認證碼進行編碼得到索引字符串。結合第二方面或第二方面的第一種可能的實現方式,在第二種可能的實現方式中,當所述索引字符串的個數為N時,所述裝置還包括:置亂單元,用于將N個索引字符串隨機置亂,N≥1,N為整數;串連單元,用于將隨機置亂后的所述N個索引字符串串連起來,串連后的所述N個索引字符串中的相鄰的索引字符串之間通過非所述預設編碼方式中的可打印字符間隔開。結合第二方面、第二方面的第一種可能的實現方式或第二種可能的實現方式,在第三種可能的實現方式中,所述裝置還包括:第一獲取單元,用于獲取搜索關鍵詞;第二生成單元,用于采用將所述目標關鍵詞生成所述索引字符串的相同方法,將所述搜索關鍵詞生成搜索字符串,所述搜索字符串為可打印字符串;所述發(fā)送單元,還用于向所述數據庫服務器發(fā)送所述搜索字符串,以便于所述數據庫服務器根據所述搜索字符串和存儲的所述索引字符串搜索所述密文。結合第二方面的第三種可能的實現方式,在第四種可能的實現方式中,所述裝置還包括:第二獲取單元,用于獲取搜索語句;所述第一獲取單元,具體用于采用所述分詞算法對所述搜索語句進行分詞得到搜索關鍵詞。第三方面,提供一種創(chuàng)建密文索引的系統,包括:第二方面提供的任一種裝置和數據庫服務器。本發(fā)明實施例提供的方法、裝置及系統,在將目標關鍵詞生成哈希認證碼之后,采用預設的編碼方式對哈希認證碼進行編碼,得到索引字符串,當索引字符串有N個時,N個索引字符串為敏感數據的密文的N個索引,數據庫服務器將密文和N個索引字符串對應存儲在同一數據表中,由于索引字符串為可打印字符串,因此,可以直接通過SQL在數據庫服務器中查詢索引字符串。若需要對包含某個關鍵詞的密文進行搜索時,采用目標關鍵詞生成索引字符串的相同方法,將搜索關鍵詞生成搜索字符串,通過SQL可以直接在數據庫服務器中將搜索字符串與N個索引字符串進行匹配,確定是否獲取密文,與現有技術相比,不用將密文的索引載入內存,節(jié)約了內存空間,并且可以提高密文搜索的速度。附圖說明為了更清楚地說明本發(fā)明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。圖1為本發(fā)明實施例提供的一種創(chuàng)建密文索引的方法的應用場景示意圖;圖2為本發(fā)明實施例提供的又一種創(chuàng)建密文索引的方法的應用場景示意圖;圖3為本發(fā)明實施例提供的一種創(chuàng)建密文索引的方法的流程圖;圖4為本發(fā)明實施例提供的又一種創(chuàng)建密文索引的方法的流程圖;圖5為本發(fā)明實施例提供的一種密文搜索的方法的流程圖;圖6為本發(fā)明實施例提供的再一種創(chuàng)建密文索引的方法的流程圖;圖7為本發(fā)明實施例提供的一種密文搜索的方法的流程圖;圖8為本發(fā)明實施例提供的一種創(chuàng)建密文索引的裝置的結構示意圖;圖9為本發(fā)明實施例提供的又一種創(chuàng)建密文索引的裝置的結構示意圖;圖10為本發(fā)明實施例提供的再一種創(chuàng)建密文索引的裝置的結構示意圖。具體實施方式下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。本文中術語“和/或”,僅僅是一種描述關聯對象的關聯關系,表示可以存在三種關系,例如,A和/或B,可以表示:單獨存在A,同時存在A和B,單獨存在B這三種情況。本文中的“多個”是指兩個或者兩個以上。本發(fā)明實施例提供的方法至少可以應用在大數據平臺或公有云平臺中。如圖1所示(示出的數字代表步驟的先后順序,圖2中同理),在大數據平臺中,用戶認為大數據服務器是可信的,因此,會直接通過用戶設備將敏感數據上傳到大數據服務器中,大數據服務器根據該敏感數據獲取到該敏感數據的密文以及該密文的索引(根據目標關鍵詞生成)后,將該密文及該密文的索引上傳到數據庫服務器中,數據庫服務器將該密文及該密文的索引對應存儲在同一數據表中。當用戶(或用戶授權的管理員)需要獲取敏感數據時,通過用戶設備向大數據服務器提供搜索關鍵詞,大數據服務器根據目標關鍵詞生成密文的索引的方法將搜索關鍵詞生成搜索字符串后向數據庫服務器發(fā)送,數據庫服務器根據搜索字符串和密文的索引獲取到密文后,將該密文向大數據服務器發(fā)送,大數據服務器將該密文解密得到敏感數據,并向用戶設備發(fā)送該敏感數據。如圖2所示,在公有云平臺中,租戶(租用公有云設備的用戶)認為公有云服務的提供商是半可信的,因此,租戶設備(租戶租用的公有云設備)根據敏感數據獲取到該敏感數據的密文以及該密文的索引(根據目標關鍵詞生成)后,將該密文及該密文的索引上傳至公有云服務器中,公有云服務器將該密文及密文的索引上傳至數據庫服務器中,當用戶需要獲取敏感數據時,租戶設備將 搜索關鍵詞根據目標關鍵詞生成密文的索引的方法生成搜索字符串,將該搜索字符串向公有云服務器發(fā)送,公有云服務器將該搜索字符串向數據庫服務器發(fā)送,數據庫服務器根據該搜索字符串和密文的索引確定出密文后通過公有云服務器向租戶設備發(fā)送,租戶設備接收到密文后,對該密文進行解密得到敏感數據。需要說明的是,數據庫服務器可以置于大數據服務器或公有云服務器內部。實施例一本發(fā)明實施例提供一種創(chuàng)建密文索引的方法,如圖3所示,包括:301、采用可逆加密算法對敏感數據進行加密得到所述敏感數據的密文。在如圖1和圖2所示的應用場景下,當本發(fā)明實施例提供的方法應用在大數據平臺中時,本發(fā)明實施例中的執(zhí)行主體可以為大數據服務器,當本發(fā)明實施例提供的方法應用在公有云平臺中時,本發(fā)明實施例中的執(zhí)行主體可以為租戶設備。示例性的,可逆加密算法可以為AES(AdvancedEncryptionStandard,高級加密標準)算法、DES(DataEncryptionStandard,數據加密標準)算法或其他可逆加密算法,本發(fā)明實施例對此不進行限制。優(yōu)選的,采用標準的數據加密算法(例如,DES算法或AES算法)相比采用非標準的數據加密算法對敏感數據進行加密而言,有利于保證密文的安全性??蛇x的,在步驟301之前,該方法還可以包括:確定敏感數據。敏感數據具體可以為用戶的手機號碼、家庭住址、身份證號碼、護照號和/或銀行賬號等。當本發(fā)明實施例的執(zhí)行主體為大數據服務器時,在大數據服務器接收到用戶設備發(fā)送的數據時,可以根據特定的協議確定出數據中的敏感數據。302、采用分詞算法對所述敏感數據進行分詞得到目標關鍵詞。其中,敏感數據可以為中文、英文或數字等,本發(fā)明實施例對此不進行限制,對不同類型的敏感數據可以采用不同的分詞算法。例如,當敏感數據為英文時,由于英文句子中的單詞一般被標點符號或空格分隔開,因 此,可以利用標點符號和空格對該英文句子進行分詞得到目標關鍵詞,當敏感數據為中文句子時,可以根據中文句子中的詞語的含義對該中文句子進行分詞。303、根據所述目標關鍵詞和哈希算法,生成哈希認證碼。優(yōu)選的,哈希算法可以為帶密鑰的哈希算法,示例性的,帶密鑰的哈希算法可以為HMAC算法,具體可以為HMAC-MD5算法,HMAC-SHA1算法,HMAC-SHA256算法等。一個目標關鍵詞對應一個哈希認證碼,將目標關鍵詞和密鑰作為哈希算法的輸入進行計算后,即可得到該目標關鍵詞對應的哈希認證碼。304、采用預設編碼方式對所述哈希認證碼進行編碼得到索引字符串,所述索引字符串為可打印字符串,所述索引字符串為所述密文的索引。需要說明的是,對一個敏感數據進行分詞后可以得到一個或多個目標關鍵詞,一個目標關鍵詞生成一個哈希認證碼,一個哈希認證碼生成一個索引字符串,則當對一個敏感數據進行分詞后得到N(N≥1,N為整數)個目標關鍵詞時,則根據N個目標關鍵詞可以生成N個索引字符串,該N個索引字符串為該敏感數據的密文的N個索引。需要說明的是,基本的ASCII(AmericanStandardCodeforInformationInterchange,美國標準信息交換代碼)字符集共有128個字符,其中有96個可打印字符,包括常用的字母、數字、標點符號等,另外還有32個控制字符。預設編碼方式是指可以將8位字節(jié)編碼成可打印字符串的編碼方式,具體可以為Base64。305、向數據庫服務器發(fā)送所述密文和所述索引字符串,以便于所述數據庫服務器將所述密文和所述索引字符串存儲在同一數據表中,所述索引字符串與所述密文是對應存儲的。具體的,將索引字符串存儲在數據庫服務器中的同一數據表中后,由于索引字符串為可打印字符串,可以直接通過SQL(StructuredQueryLanguage,結構化查詢語言)在數據庫服務器中進行查詢。需要說明的是,步驟301可以執(zhí)行在步驟302至步驟304中的任意一 個步驟之前或之后。需要說明的是,敏感數據可能有多個,每個敏感數據的密文都有對應的索引,每個敏感數據的密文對應的索引的個數可以相同也可以不同。示例性的,如表1所示,表1示出了2個不同的敏感數據的密文與其索引的對應關系,其中,X1和X2代表2個不同的敏感數據的密文,B11至B14為X1的4個索引,B21至B23為X2的3個索引。表1可選的,在步驟304之前,所述方法還包括:截取所述哈希認證碼的前r位,得到子哈希認證碼,1≤r≤R,R和r均為整數,R為所述哈希認證碼的長度;該情況下,步驟304包括:采用預設編碼方式對所述子哈希認證碼進行編碼得到索引字符串。一般情況下,哈希認證碼的長度很長,該可選的方法,可以減小運算量??蛇x的,所述方法還包括:11)獲取搜索關鍵詞;12)采用將所述目標關鍵詞生成所述索引字符串的相同方法,將所述搜索關鍵詞生成搜索字符串,所述搜索字符串為可打印字符串;13)向所述數據庫服務器發(fā)送所述搜索字符串,以便于所述數據庫服務器根據所述搜索字符串和存儲的所述索引字符串搜索所述密文。可選的,在步驟11)之前,所述方法還包括:獲取搜索語句;該情況下,步驟11)包括:采用所述分詞算法對所述搜索語句進行分詞得到搜索 關鍵詞。需要說明的是,對密文進行搜索時,可以直接通過搜索關鍵詞進行搜索,也可以通過一句(段)話進行搜索,該情況下,需要對該句(段)話采用分詞算法進行分詞得到搜索關鍵詞,搜索關鍵詞可以有一個或多個,一個搜索關鍵詞對應一個搜索字符串。可選的,所述方法還包括:所述數據庫服務器接收M個搜索字符串,當M≥2時,所述數據庫服務器還獲取搜索方式,所述搜索方式為與方式或者或方式;所述數據庫服務器將所述M個搜索字符串與存儲的所述索引字符串進行匹配;若M=1,獲取與所述搜索字符串相同的索引字符串對應的密文;若M≥2、且所述搜索方式為與方式時,獲取與所述M個搜索字符串相同的M個索引字符串所對應的密文;若M≥2、且所述搜索方式為或方式時,獲取與所述M個搜索字符串中任一搜索字符串相同的索引字符串所對應的密文。由于索引字符串是根據目標關鍵詞生成的,而目標關鍵詞是利用分詞算法對敏感數據進行分詞后得到的,因此,當有一個搜索關鍵詞時,采用目標關鍵詞生成索引字符串的相同方法,將該搜索關鍵詞生成搜索字符串后,假設密文的索引有N個,則當搜索字符串與N個索引字符串中的一個相同時,說明該搜索關鍵詞為密文對應的敏感數據中的一個詞,該情況下,獲取密文;當搜索字符串與N個索引字符串中的任意一個都不相同時,說明該搜索關鍵詞不是密文對應的敏感數據中的詞,該情況下,不獲取密文。當有多個搜索關鍵詞、且搜索方式為或方式時,說明用戶需要的敏感數據為包含多個搜索關鍵詞中的任意一個搜索關鍵詞的敏感數據,該情況下,只要多個搜索關鍵詞中的任意一個搜索關鍵詞對應的搜索字符串與N個索引字符串中的一個相同時,獲取密文,否則,不獲取密文;當有多個搜索關鍵詞、且搜索方式為與方式時,說明用戶需要的敏感數據為包含多個搜索關鍵詞的敏感數據,該情況下,多個搜索關鍵詞對應的多個搜索字符串與N個索引字符串中的多個搜索字符串分別相同時,獲取密文,否則, 不獲取密文。需要說明的是,當一個搜索關鍵詞為多個敏感數據中的詞時,服務器獲取多個敏感數據的密文。示例性的,基于表1所述的示例,若密文X1的明文為“0501”,“0501”的4個目標關鍵詞為{0,05,050,0501},密文X2的明文為“052”,“052”的3個目標關鍵詞為{0,05,052}。每個目標關鍵詞對應的索引字符串如表2所示。當搜索關鍵詞為“05”時,搜索關鍵詞對應的搜索字符串為B1′,將B1′分別與密文X1和密文X2的索引進行匹配,由于B1′與B12和B22相同,則獲取密文X1和X2。當搜索關鍵詞為“052”時,搜索關鍵詞對應的搜索字符串為B2′,則將B2′分別與密文X1和密文X2的索引進行匹配,由于B2′與B23相同,則獲取密文X2。表2索引字符串目標關鍵詞B110B1205B13050B140501B210B2205B23052基于表2所述的示例,當搜索關鍵詞為“05”和“052”時,其分別對應的搜索字符串為B1′和B2′,則將B1′和B2′分別與密文X1和密文X2的索引進行匹配,B1′與B12和B22相同,B2′與B23相同;則當搜索方式為與方式時,獲取密文X2,當搜索方式為或方式,獲取密文X1和X2??蛇x的,當所述索引字符串的個數為N時,在步驟304之后,所述方法還包括:將N個索引字符串隨機置亂,N≥1,N為整數;將隨機置亂后的所述N個索引字符串串連起來,串連后的所述N個索引字符串中的相鄰的索引字符串之間通過非所述預設編碼方式中的可打印字符間隔開。該情況下,步驟305具體包括:向數據庫服務器發(fā)送所述密文和串連后的所述N個索引字符串。數據庫服務器在存儲串連后的N個索引字符 串時,可以占用數據表中的一個字段中的一個存儲單元存儲,該字段用于存儲一個或多個密文的索引。其中,"字段"是指數據庫服務器中的數據表的"列",一列包括一個或多個存儲單元,本發(fā)明實施例中,一個密文對應的N個索引字符串在串連后可以存儲在一個存儲單元中。需要說明的是,由于需要將N個索引字符串串連后存儲,而N個索引字符串是根據N個目標關鍵詞生成的,N個索引字符串順序排放可能泄露密文的內容,因此,為了提高密文的安全性,在將N個索引字符串串連之前,將N個索引字符串隨機置亂。本發(fā)明實施例中將N個索引字符串串連起來,在存儲N個索引字符串時,可以只占用一個字段中的一個存儲單元進行存儲,節(jié)約了數據庫服務器的資源。同時,通過非預設編碼方式中的可打印字符將N個索引字符串間隔開可以防止匹配出錯。例如,2個索引字符串分別為AAAA和BBBB,一個搜索字符串為AABB,假設非預設編碼方式中的可打印字符為“!”,那么若2個索引字符串直接串連,則串連后的2個索引字符串為AAAABBBB,在將搜索字符串AABB與AAAABBBB進行匹配時,由于AABB與AAAABBBB中間的部分相同,則可能使得匹配結果出錯;若2個索引字符串采用“!”間隔開,則串連后的2個索引字符串為AAAA!BBBB,在將搜索字符串AABB與AAAA!BBBB進行匹配時,只會匹配被“!”間隔開的索引字符串,因此,可以防止匹配結果出錯。另外,對密文進行搜索時,也可以通過幾句(段)話進行搜索,該幾句(段)話之間的搜索方式可以為與方式或者或方式。該情況下,若有W句(段)話,可以采用分詞算法對W句(段)話分別進行分詞得到每句(段)話對應的搜索關鍵詞,采用目標關鍵詞生成索引字符串的相同方法,將每句(段)話對應的搜索關鍵詞生成搜索字符串;其中,一個搜索關鍵詞對應一個搜索字符串。假設W句(段)話中的第i(1≤i≤W,i為整數)句話對應的搜索字符串的個數為wi(wi≥1,wi為整數),W句(段)話對應的所有不同的搜索字符串的總個數為w(w≥1,w為整數),在對密文進行搜索的過程中,具體的:當W句(段)話之間的搜索方式為與方式、且每句話對應的搜索關鍵詞之間的搜索方式為與方式時,當w個搜索字符串分別與N個索引字符串中的w個索引字符串相同時,獲取密文;當W句(段)話之間的搜索方式為或方式、且每句話對應的搜索關鍵詞之間的搜索方式為或方式時,當w個搜索字符串中任意一個搜索字符串與N個索引字符串中的一個索引字符串相同時,獲取密文;當W句(段)話之間的搜索方式為與方式、且每句話對應的搜索關鍵詞之間的搜索方式為或方式時,當W句(段)話對應的W個搜索字符串分別與N個索引字符串中的W個索引字符串相同時,獲取密文;其中,W個搜索字符串分別對應W句(段)話;當W句(段)話之間的搜索方式為或方式、且每句話對應的搜索關鍵詞之間的搜索方式為與方式時,當第i句(段)話對應的wi個搜索字符串分別與N個索引字符串中的wi個索引字符串相同時,獲取密文,第i句(段)話可以為W句(段)話中的任意一句話。可選的,步驟303包括:根據第一結果和哈希算法,生成哈希認證碼,所述第一結果為將目標參數與所述目標關鍵詞直接串連后得到的結果,所述目標參數為所述密文或加密所述敏感數據時采用的初始向量;該情況下,步驟12)包括:采用將所述第一結果生成所述索引字符串的相同方法,將第二結果生成搜索字符串,所述第二結果為將目標參數與所述搜索關鍵詞直接串連后得到的結果。需要說明的是,在對安全性要求非常高的應用場景下,由于不同的用戶可能上傳包含相同詞語的敏感數據,若采用相同的方法生成所有用戶的敏感數據的密文,并采用相同的方法生成所有用戶的敏感數據的密文的索引,當根據一個搜索關鍵詞對密文進行搜索時,可能會將其他用戶的包含該搜索關鍵詞的密文獲取到,使得密文的安全性降低?;谠搯栴},可以使得生成的不同的用戶(或租戶)的敏感數據的密文和該密文的索引不同來提高密文的安全性。具體的,采用AES算法或DES算法時,在生成不同用戶的敏感數據的密文時使用隨機的初始向量,那么生成的不同的用戶的敏感數據的密文必然不同。在生成密文的索引時, 根據第一結果和哈希算法生成,由于第一結果中包含的目標參數不同,使得生成的不同的用戶的敏感數據的密文的索引必然不同。
背景技術:
中提到的現有技術中,在搜索匹配階段,需要將哈希認證碼構造為平衡28叉樹,因此,需要將N個哈希認證碼載入到服務器的內存中,在內存中構造每個哈希認證碼對應的平衡28叉樹的索引結構,并與根據搜索關鍵詞生成的平衡28叉樹進行匹配,因此,需要花費額外的內存空間,并且會大大的降低密文搜索的速度。本發(fā)明實施例提供的方法,在將目標關鍵詞生成哈希認證碼之后,采用預設的編碼方式對哈希認證碼進行編碼,得到索引字符串,當索引字符串有N個時,N個索引字符串為敏感數據的密文的N個索引,數據庫服務器將密文和N個索引字符串對應存儲在同一數據表中,由于索引字符串為可打印字符串,因此,可以直接通過SQL在數據庫服務器中查詢索引字符串。若需要對包含某個關鍵詞的密文進行搜索時,采用目標關鍵詞生成索引字符串的相同方法,將搜索關鍵詞生成搜索字符串,通過SQL可以直接在數據庫服務器中將搜索字符串與N個索引字符串進行匹配,確定是否獲取密文,與現有技術相比,不用將密文的索引載入內存,節(jié)約了內存空間,并且可以提高密文搜索的速度。實施例二需要說明的是,在大數據平臺中,數據庫服務器一般置于大數據服務器內,該實施例以該情況為例對實施例一中提供的創(chuàng)建密文索引的方法進行說明,該實施例中的相關解釋可以參見上述實施例,如圖4所示,該方法包括:401、用戶設備向大數據服務器發(fā)送數據。具體的,當用戶設備所屬的用戶需要將數據存儲在大數據服務器中時,可以通過用戶設備向大數據服務器發(fā)送數據。402、大數據服務器接收用戶設備發(fā)送的數據,并確定該數據中的敏感數據。需要說明的是,用戶設備向大數據服務器發(fā)送的數據中可能包括多個敏感數據,本發(fā)明實施例中以一個敏感數據為例進行說明。403、大數據服務器采用可逆加密算法對敏感數據進行加密,得到敏感數據的密文X。具體的,可逆加密算法可以為AES、DES或其他可逆加密算法,本發(fā)明實施例對此不進行限制。404、大數據服務器采用分詞算法對敏感數據進行分詞得到N個目標關鍵詞K1、K2、…、KN。具體的,當敏感數據不同時,采用的分詞算法也可以不同。當敏感數據為中文時,可以采用智能分詞算法或細粒度分詞算法,當敏感數據為數字時,可以采用前綴分詞算法或后綴分詞算法。下面介紹幾種分詞算法分詞的原理:1、智能分詞:把句子中有意義的最大詞分割出來作為目標關鍵詞。例如:“優(yōu)秀工程師”的分詞結果為{優(yōu)秀,工程師}。2、細粒度分詞:把句子中從有意義的最大詞到有意義的最小詞全部分割出來作為目標關鍵詞。例如:“優(yōu)秀工程師”的分詞結果為{優(yōu)秀,工程師,工程,師}。具體的,可以采用中文分詞工具IKAnalyze實現智能分詞算法和細粒度分詞算法。3、前綴分詞:從長度為L(L≥1,L為整數)的句子中依次截取連續(xù)前1、2、…、L個字符分別作為目標關鍵詞。例如:“050119”的分詞結果為{0,05,050,0501,05011,050119}。405、大數據服務器根據N個目標關鍵詞K1、K2、…、KN和帶密鑰的哈希算法生成N個哈希認證碼H1、H2、…、HN。示例性的,帶密鑰的哈希算法可以為HMAC算法,具體可以為HMAC-MD5算法,HMAC-SHA1算法,HMAC-SHA256算法等。406、大數據服務器截取N個哈希認證碼H1、H2、…、HN中的每個哈希認證碼的前r位,得到N個子哈希認證碼S1、S2、…、SN。其中,1≤r≤R,R和r均為整數,R為哈希認證碼的長度。需要說明的是,哈希認證碼可以有256位,為了減小運算量,可以將哈希認證碼截取前r位用來計算。407、大數據服務器采用預設編碼方式對N個子哈希認證碼S1、S2、…、SN分別進行編碼得到N個索引字符串B1、B2、…、BN。具體的,預設編碼方式可以為Base64,子哈希認證碼經過Base64編碼后得到的字符串為可打印字符串。408、大數據服務器將N個索引字符串B1、B2、…、BN隨機置亂,得到亂序的N個索引字符串C1、C2、…、CN。需要說明的是,由于B1、B2、…、BN是根據N個目標關鍵詞生成的,B1、B2、…、BN順序排放可能泄露密文的內容,因此,為了提高密文的安全性,將N個索引字符串B1、B2、…、BN隨機置亂。409、大數據服務器將隨機置亂后的所述N個索引字符串C1、C2、…、CN串連起來。其中,串連后的所述N個索引字符串中的相鄰的索引字符串之間通過非所述預設編碼方式中的可打印字符間隔開,具體的,當預設編碼方式為Base64時,字符“!”不是Base64中使用的可打印字符,則該可打印字符可以為“!”。410、大數據服務器將串連后的N個索引字符串C1、C2、…、CN和密文X存儲在數據庫服務器中的同一數據表中。其中,N個索引字符串為密文的N個索引,密文的索引與密文對應存儲,需要說明的是,現有技術中在生成敏感數據的密文的N個索引后,在數據表中每個索引占用一個字段中的一個存儲單元來存儲,本發(fā)明實施例中將密文的N個索引串連起來,在存儲N個索引時,可以只占用數據表中的一個字段中的一個存儲單元進行存儲。同時,通過非預設編碼方式中的可打印字符將索引字符串之間間隔開可以防止匹配出錯。當用戶需要獲取敏感數據時,可以通過用戶設備向大數據服務器發(fā)送搜索關鍵詞,使得大數據服務器根據搜索關鍵詞搜索出密文并解密得到敏感數據后向用戶設備發(fā)送,如圖5所示,具體的過程包括:501、用戶設備向大數據服務器發(fā)送M個搜索關鍵詞,當M≥2時,用戶 設備還向大數據服務器發(fā)送搜索方式,搜索方式為與方式或者或方式;M≥1,M為整數。502、大數據服務器接收M個搜索關鍵詞,當M≥2時,大數據服務器還接收搜索方式。503、大數據服務器采用目標關鍵詞生成索引字符串的相同方法,將M個搜索關鍵詞生成M個搜索字符串B1′、B2′、…、BM′。504、大數據服務器將M個搜索字符串B1′、B2′、…、BM′與C1!C2!…!CN中包括的N個索引字符串進行匹配。具體的,若M=1,當所述M個搜索字符串與N個索引字符串中的一個索引字符串相同時,獲取所述密文;若M≥2、且所述搜索方式為與方式時,當所述M個搜索字符串與N個索引字符串中的M個索引字符串相同時,獲取所述密文;若M≥2、且所述搜索方式為或方式時,當所述M個搜索字符串中的任意一個搜索字符串與N個索引字符串中的一個索引字符串相同時,獲取所述密文。當大數據服務器獲取到密文時,執(zhí)行步驟505至步驟507;當大數據服務器未獲取到密文時,大數據服務器向用戶設備發(fā)送搜索失敗的消息。圖5中以大數據服務器獲取到密文為例進行繪制。505、大數據服務器采用可逆加密算法對應的解密算法將獲取到的密文進行解密,得到敏感數據。506、大數據服務器向用戶設備發(fā)送敏感數據。507、用戶設備接收大數據服務器發(fā)送的敏感數據。具體的,獲取密文的示例可參見表2所述的示例。本發(fā)明實施例提供的方法,在將目標關鍵詞生成哈希認證碼之后,采用預設的編碼方式對哈希認證碼進行編碼,得到索引字符串,當索引字符串有N個時,N個索引字符串為敏感數據的密文的N個索引,數據庫服務器將密文和N個索引字符串對應存儲在同一數據表中,由于索引字符串為可打印字符串,因此,可以直接通過SQL在數據庫服務器中查詢索引字符串。若需要 對包含某個關鍵詞的密文進行搜索時,采用目標關鍵詞生成索引字符串的相同方法,將搜索關鍵詞生成搜索字符串,通過SQL可以直接在數據庫服務器中將搜索字符串與N個索引字符串進行匹配,確定是否獲取密文,與現有技術相比,不用將密文的索引載入內存,節(jié)約了內存空間,并且可以提高密文搜索的速度。實施例三需要說明的是,在公有云平臺中,數據庫服務器一般置于公有云服務器內,該實施例以該情況為例對實施例一中提供的創(chuàng)建密文索引的方法進行說明,該實施例中的相關解釋可以參見上述實施例,如圖6所示,該方法包括:601、租戶設備確定敏感數據。本發(fā)明實施例中以一個敏感數據為例進行說明。602、租戶設備采用可逆加密算法對敏感數據進行加密,得到敏感數據的密文X。具體的,可逆加密算法可以為AES、DES或其他可逆加密算法,本發(fā)明實施例對此不進行限制。603、租戶設備采用分詞算法對敏感數據進行分詞得到N個目標關鍵詞K1、K2、…、KN。具體的,當敏感數據不同時,采用的分詞算法也可以不同。當敏感數據為中文時,可以采用智能分詞算法或細粒度分詞算法,當敏感數據為數字時,可以采用前綴分詞算法或后綴分詞算法。具體的幾種分詞算法的原理可參見實施例二中的描述。604、租戶設備根據N個目標關鍵詞K1、K2、…、KN和帶密鑰的哈希算法生成N個哈希認證碼H1、H2、…、HN。示例性的,帶密鑰的哈希算法可以為HMAC算法,具體可以為HMAC-MD5算法,HMAC-SHA1算法,HMAC-SHA256算法等。605、租戶設備截取N個哈希認證碼H1、H2、…、HN中的每個哈希認證碼的前r位,得到N個子哈希認證碼S1、S2、…、SN。其中,1≤r≤R,R和r均為整數,R為哈希認證碼的長度。需要說明的是,哈希認證碼可以有256位,為了減小運算量,可以將哈希認證碼截取前r位用來計算。606、租戶設備采用預設編碼方式對N個子哈希認證碼S1、S2、…、SN分別進行編碼得到N個索引字符串B1、B2、…、BN。具體的,預設編碼方式可以為Base64,子哈希認證碼經過Base64編碼后得到的字符串為可打印字符串。607、租戶設備將N個索引字符串B1、B2、…、BN隨機置亂,得到亂序的N個索引字符串C1、C2、…、CN。需要說明的是,由于B1、B2、…、BN是根據N個目標關鍵詞生成的,B1、B2、…、BN順序排放可能泄露密文的內容,因此,為了提高密文的安全性,將N個索引字符串B1、B2、…、BN隨機置亂。608、租戶設備將隨機置亂后的所述N個索引字符串C1、C2、…、CN串連起來。其中,串連后的所述N個索引字符串中的相鄰的索引字符串之間通過非所述預設編碼方式中的可打印字符間隔開,具體的,當預設編碼方式為Base64時,字符“!”不是Base64中使用的可打印字符,則該可打印字符可以為“!”。609、租戶設備向公有云服務器發(fā)送串連后的N個索引字符串C1、C2、…、CN和密文X。610、公有云服務器接收租戶設備發(fā)送的串連后的N個索引字符串C1、C2、…、CN和密文X,并將串連后的N個索引字符串C1、C2、…、CN和密文X存儲在數據庫服務器中的同一數據表中。其中,N個索引字符串為密文的N個索引,密文的索引與密文對應存儲,需要說明的是,現有技術中在生成敏感數據的密文的N個索引后,在數據表中每個索引占用一個字段中的一個存儲單元來存儲,本發(fā)明實施例中將密文的N個索引串連起來,在存儲N個索引時,可以只占用數據表中的一個字段中的一個存儲單元進行存儲。同時,通過非預設編碼方式中的可打印字符將索引字符串之間間隔開可以防止匹配出錯。當用戶需要獲取密文時,如圖7所示,可以通過以下過程獲取:701、租戶設備確定M個搜索關鍵詞,并采用目標關鍵詞生成索引字符串的相同方法,將M個搜索關鍵詞生成M個搜索字符串B1′、B2′、…、BM′,當M≥2時,租戶設備還確定搜索方式,搜索方式為與方式或者或方式,M≥1,M為整數。702、租戶設備向公有云服務器發(fā)送M個搜索字符串B1′、B2′、…、BM′和搜索方式。703、公有云服務器接收租戶設備發(fā)送的M個搜索字符串B1′、B2′、…、BM′和搜索方式。704、公有云服務器將M個搜索字符串B1′、B2′、…、BM′與C1!C2!…!CN中包括的N個索引字符串進行匹配;若M=1,當所述M個搜索字符串與N個索引字符串中的一個索引字符串相同時,獲取所述密文;若M≥2、且所述搜索方式為與方式時,當所述M個搜索字符串與N個索引字符串中的M個索引字符串相同時,獲取所述密文;若M≥2、且所述搜索方式為或方式時,當所述M個搜索字符串中的任意一個搜索字符串與N個索引字符串中的一個索引字符串相同時,獲取所述密文。當公有云服務器獲取到密文時,執(zhí)行步驟705至步驟707;當公有云服務器未獲取到密文時,公有云服務器向租戶設備發(fā)送搜索失敗的消息。圖7中以公有云服務器獲取到密文為例進行繪制。705、公有云服務器向租戶設備發(fā)送獲取到的密文。706、租戶設備接收公有云服務器發(fā)送的密文。707、租戶設備采用可逆加密算法對應的解密算法將獲取到的密文進行解密,得到敏感數據。具體的,獲取密文的示例可參見表2所述的示例。本發(fā)明實施例提供的方法,在將目標關鍵詞生成哈希認證碼之后,采 用預設的編碼方式對哈希認證碼進行編碼,得到索引字符串,當索引字符串有N個時,N個索引字符串為敏感數據的密文的N個索引,數據庫服務器將密文和N個索引字符串對應存儲在同一數據表中,由于索引字符串為可打印字符串,因此,可以直接通過SQL在數據庫服務器中查詢索引字符串。若需要對包含某個關鍵詞的密文進行搜索時,采用目標關鍵詞生成索引字符串的相同方法,將搜索關鍵詞生成搜索字符串,通過SQL可以直接在數據庫服務器中將搜索字符串與N個索引字符串進行匹配,確定是否獲取密文,與現有技術相比,不用將密文的索引載入內存,節(jié)約了內存空間,并且可以提高密文搜索的速度。實施例四本發(fā)明實施例提供一種創(chuàng)建密文索引的裝置80,用于執(zhí)行圖3所示的方法,如圖8所示,該裝置80包括:加密單元801,用于采用可逆加密算法對敏感數據進行加密得到所述敏感數據的密文;分詞單元802,用于采用分詞算法對所述敏感數據進行分詞得到目標關鍵詞;第一生成單元803,用于根據所述目標關鍵詞和哈希算法,生成哈希認證碼;編碼單元804,用于采用預設編碼方式對所述哈希認證碼進行編碼得到索引字符串,所述索引字符串為可打印字符串,所述索引字符串為所述密文的索引;發(fā)送單元805,用于向數據庫服務器發(fā)送所述密文和所述索引字符串,以便于所述數據庫服務器將所述密文和所述索引字符串存儲在同一數據表中,所述索引字符串與所述密文是對應存儲的??蛇x的,如圖9所示,所述裝置80還包括:截取單元806,用于截取所述哈希認證碼的前r位,得到子哈希認證碼,1≤r≤R,R和r均為整數,R為所述哈希認證碼的長度;所述編碼單元804,具體用于采用預設編碼方式對所述子哈希認證碼 進行編碼得到索引字符串??蛇x的,如圖9所示,當所述索引字符串的個數為N時,所述裝置80還包括:置亂單元807,用于將N個索引字符串隨機置亂,N≥1,N為整數;串連單元808,用于將隨機置亂后的所述N個索引字符串串連起來,串連后的所述N個索引字符串中的相鄰的索引字符串之間通過非所述預設編碼方式中的可打印字符間隔開??蛇x的,如圖9所示,所述裝置80還包括:第一獲取單元809,用于獲取搜索關鍵詞;第二生成單元810,用于采用將所述目標關鍵詞生成所述索引字符串的相同方法,將所述搜索關鍵詞生成搜索字符串,所述搜索字符串為可打印字符串;所述發(fā)送單元805,還用于向所述數據庫服務器發(fā)送所述搜索字符串,以便于所述數據庫服務器根據所述搜索字符串和存儲的所述索引字符串搜索所述密文??蛇x的,如圖9所示,所述裝置80還包括:第二獲取單元811,用于獲取搜索語句;所述第一獲取單元809,具體用于采用所述分詞算法對所述搜索語句進行分詞得到搜索關鍵詞。本發(fā)明實施例提供的裝置,在將目標關鍵詞生成哈希認證碼之后,采用預設的編碼方式對哈希認證碼進行編碼,得到索引字符串,當索引字符串有N個時,N個索引字符串為敏感數據的密文的N個索引,數據庫服務器將密文和N個索引字符串對應存儲在同一數據表中,由于索引字符串為可打印字符串,因此,可以直接通過SQL在數據庫服務器中查詢索引字符串。若需要對包含某個關鍵詞的密文進行搜索時,采用目標關鍵詞生成索引字符串的相同方法,將搜索關鍵詞生成搜索字符串,通過SQL可以直接在數據庫服務器中將搜索字符串與N個索引字符串進行匹配,確定是否獲取密文,與現有技術相比,不用將密文的索引載入內存,節(jié)約了內存空間,并且可以提高密文 搜索的速度。實施例五在硬件實現上,上述裝置中的各個單元可以以硬件形式內嵌于或獨立于該裝置的處理器中,也可以以軟件形式存儲于該裝置的存儲器中,以便于處理器調用執(zhí)行以上各個單元對應的操作,該處理器可以為中央處理單元(CPU)、微處理器、單片機等。如圖10所示,本發(fā)明實施例提供另一種創(chuàng)建密文索引的裝置100,用于執(zhí)行如圖3所示的方法,該裝置100包括:存儲器1001、處理器1002、發(fā)送器1003和總線系統1004。其中,存儲器1001、處理器1002和發(fā)送器1003之間是通過總線系統1004耦合在一起的,其中存儲器1001可能包含隨機存取存儲器,也可能還包括非易失性存儲器,例如至少一個磁盤存儲器??偩€系統1004,可以是ISA總線、PCI總線或EISA總線等。該總線系統1004可以分為地址總線、數據總線、控制總線等。為便于表示,圖10中僅用一條粗線表示,但并不表示僅有一根總線或一種類型的總線。存儲器1001內存儲一組代碼,該代碼用于控制處理器1002執(zhí)行以下動作:采用可逆加密算法對敏感數據進行加密得到所述敏感數據的密文;采用分詞算法對所述敏感數據進行分詞得到目標關鍵詞;根據所述目標關鍵詞和哈希算法,生成哈希認證碼;采用預設編碼方式對所述哈希認證碼進行編碼得到索引字符串,所述索引字符串為可打印字符串,所述索引字符串為所述密文的索引;所述發(fā)送器1003,用于向數據庫服務器發(fā)送所述密文和所述索引字符串,以便于所述數據庫服務器將所述密文和所述索引字符串存儲在同一數據表中,所述索引字符串與所述密文是對應存儲的??蛇x的,所述處理器1002還用于:截取所述哈希認證碼的前r位,得到子哈希認證碼,1≤r≤R,R和r均為整數,R為所述哈希認證碼的長度;所述處理器1002,具體用于采用預設編碼方式對所述子哈希認證碼進行編碼得到索引字符串??蛇x的,當所述索引字符串的個數為N時,所述處理器1002還用于:將N個索引字符串隨機置亂,N≥1,N為整數;將隨機置亂后的所述N個索引字符串串連起來,串連后的所述N個索引字符串中的相鄰的索引字符串之間通過非所述預設編碼方式中的可打印字符間隔開??蛇x的,所述處理器1002還用于:獲取搜索關鍵詞;采用將所述目標關鍵詞生成所述索引字符串的相同方法,將所述搜索關鍵詞生成搜索字符串,所述搜索字符串為可打印字符串;所述發(fā)送器1003,還用于向所述數據庫服務器發(fā)送所述搜索字符串,以便于所述數據庫服務器根據所述搜索字符串和存儲的所述索引字符串搜索所述密文??蛇x的,所述處理器1002還用于:獲取搜索語句;所述處理器1002,具體用于采用所述分詞算法對所述搜索語句進行分詞得到搜索關鍵詞。本發(fā)明實施例提供的裝置,在將目標關鍵詞生成哈希認證碼之后,采用預設的編碼方式對哈希認證碼進行編碼,得到索引字符串,當索引字符串有N個時,N個索引字符串為敏感數據的密文的N個索引,數據庫服務器將密文和N個索引字符串對應存儲在同一數據表中,由于索引字符串為可打印字符串,因此,可以直接通過SQL在數據庫服務器中查詢索引字符串。若需要對包含某個關鍵詞的密文進行搜索時,采用目標關鍵詞生成索引字符串的相同方法,將搜索關鍵詞生成搜索字符串,通過SQL可以直接在數據庫服務器中將搜索字符串與N個索引字符串進行匹配,確定是否獲取密文,與現有技術相比,不用將密文的索引載入內存,節(jié)約了內存空間,并且可以提高密文搜索的速度。本發(fā)明實施例還提供了一種創(chuàng)建密文索引的系統,該系統包括上述裝 置80和上述數據庫服務器,或者,該系統包括上述裝置100和上述數據庫服務器。所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,僅以上述各功能模塊的劃分進行舉例說明,實際應用中,可以根據需要而將上述功能分配由不同的功能模塊完成,即將裝置的內部結構劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。上述描述的裝置和模塊的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。在本申請所提供的幾個實施例中,應該理解到,所揭露的裝置和方法,可以通過其它的方式實現。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述模塊的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個模塊或組件可以結合或者可以集成到另一個系統,或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接。另外,在本申請各個實施例中的各功能模塊可以集成在一個處理模塊中,也可以是各個模塊單獨物理存在,也可以兩個或兩個以上模塊集成在一個模塊中。上述集成的模塊既可以采用硬件的形式實現,也可以采用軟件功能模塊的形式實現。以上所述,以上實施例僅用以說明本申請的技術方案,而非對其限制;盡管參照前述實施例對本申請進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本申請各實施例技術方案的精神和范圍。當前第1頁1 2 3