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