本發(fā)明屬于計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種基于云服務(wù)的模式串匹配驗(yàn)證方法及裝置。
背景技術(shù):
模式串匹配是指在較長(zhǎng)字符串中找到與給定較短字符串的所有子串的過(guò)程,已被廣泛地用于垃圾郵箱過(guò)濾、入侵檢測(cè)、防火墻過(guò)濾以及信息檢索等領(lǐng)域,目前隨著云技術(shù)的發(fā)展,越來(lái)越多的企業(yè)、個(gè)人出于方便管理和節(jié)約成本的考慮,將模式串匹配查詢(xún)外包給云計(jì)算處理,但是這也導(dǎo)致用戶(hù)失去了對(duì)數(shù)據(jù)和數(shù)據(jù)查詢(xún)的控制權(quán),引發(fā)了如何驗(yàn)證云端返回的查詢(xún)結(jié)果是否正確、是否可靠的問(wèn)題,即數(shù)據(jù)查詢(xún)可驗(yàn)證問(wèn)題。
現(xiàn)有技術(shù)中該問(wèn)題的解決方案為云服務(wù)在得到匹配結(jié)果的同時(shí)生成驗(yàn)證證據(jù),將匹配結(jié)果和驗(yàn)證證據(jù)一起發(fā)送給用戶(hù),用戶(hù)再通過(guò)用于匹配查詢(xún)的模式串、匹配結(jié)果和驗(yàn)證證據(jù),來(lái)驗(yàn)證匹配結(jié)果是否正確。具體的實(shí)現(xiàn)方案主要有Martel et al.在2004年提出的可驗(yàn)證數(shù)據(jù)結(jié)構(gòu)的通用解決方案和Papadopoulos et al.在2015年提出的實(shí)用的可驗(yàn)證模式串匹配Suffix Tree(后綴樹(shù))方案,但是第一種方案的驗(yàn)證證據(jù)較大,導(dǎo)致用戶(hù)的驗(yàn)證效率較低,第二種方案云服務(wù)返回給用戶(hù)的驗(yàn)證證據(jù)內(nèi)容較為繁多、簡(jiǎn)潔度不夠,同樣導(dǎo)致用戶(hù)的驗(yàn)證步驟較為繁雜。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種基于云服務(wù)的模式串匹配驗(yàn)證方法及裝置,旨在解決由于現(xiàn)有技術(shù)無(wú)法提供一種簡(jiǎn)潔有效的模式串匹配驗(yàn)證方法,導(dǎo)致外包給云服務(wù)的數(shù)據(jù)量過(guò)多、云服務(wù)返回給用戶(hù)的驗(yàn)證證據(jù)內(nèi)容過(guò)于繁多以及用戶(hù)在驗(yàn)證云服務(wù)返回的匹配結(jié)果時(shí)驗(yàn)證效率較低的問(wèn)題。
一方面,本發(fā)明提供了一種基于云服務(wù)的模式串匹配驗(yàn)證方法,所述方法包括下述步驟:
預(yù)設(shè)云服務(wù)器接收到數(shù)據(jù)訪問(wèn)端的模式串匹配查詢(xún)請(qǐng)求時(shí),獲取所述模式匹配查詢(xún)請(qǐng)求中的待匹配模式串;
所述云服務(wù)器將所述待匹配模式串與預(yù)先存儲(chǔ)的文本串進(jìn)行匹配;
當(dāng)所述待匹配模式串在所述文本串中匹配成功時(shí),所述云服務(wù)器根據(jù)所述文本串關(guān)聯(lián)的查詢(xún)數(shù)據(jù)結(jié)構(gòu)和可驗(yàn)證數(shù)據(jù)結(jié)構(gòu),獲取匹配成功的驗(yàn)證證據(jù),并將所述匹配成功的結(jié)果和所述匹配成功的驗(yàn)證證據(jù)發(fā)送給所述數(shù)據(jù)訪問(wèn)端,所述可驗(yàn)證數(shù)據(jù)結(jié)構(gòu)由數(shù)據(jù)擁有端通過(guò)預(yù)設(shè)的哈希函數(shù)對(duì)所述文本串進(jìn)行預(yù)處理得到;
所述數(shù)據(jù)訪問(wèn)端根據(jù)所述待匹配模式串、所述匹配成功的驗(yàn)證證據(jù)以及與所述文本串關(guān)聯(lián)的驗(yàn)證參數(shù),確定所述匹配成功的結(jié)果是否正確。
另一方面,本發(fā)明提供了一種基于云服務(wù)的模式串匹配驗(yàn)證裝置,所述裝置包括:
模式串獲取模塊,用于預(yù)設(shè)云服務(wù)器接收到數(shù)據(jù)訪問(wèn)端的模式串匹配查詢(xún)請(qǐng)求時(shí),獲取所述模式串匹配查詢(xún)請(qǐng)求中的待匹配模式串;
模式串匹配模塊,用于所述云服務(wù)器將所述待匹配模式串與預(yù)先存儲(chǔ)的文本串進(jìn)行匹配;
證據(jù)獲取模塊,用于當(dāng)所述待匹配模式串在所述文本串中匹配成功時(shí),所述云服務(wù)器根據(jù)所述文本串關(guān)聯(lián)的查詢(xún)數(shù)據(jù)結(jié)構(gòu)和可驗(yàn)證數(shù)據(jù)結(jié)構(gòu),獲取匹配成功的驗(yàn)證證據(jù),并將所述匹配成功的結(jié)果和所述匹配成功的驗(yàn)證證據(jù)發(fā)送給所述數(shù)據(jù)訪問(wèn)端,所述可驗(yàn)證數(shù)據(jù)結(jié)構(gòu)由數(shù)據(jù)擁有端通過(guò)預(yù)設(shè)的哈希函數(shù)對(duì)所述文本串進(jìn)行預(yù)處理得到;以及
驗(yàn)證模塊,用于所述數(shù)據(jù)訪問(wèn)端根據(jù)所述驗(yàn)證證據(jù)、所述匹配成功的驗(yàn)證證據(jù)以及與所述文本串關(guān)聯(lián)的驗(yàn)證參數(shù),確定所述匹配成功的結(jié)果是否正確。
本發(fā)明包括云服務(wù)器、數(shù)據(jù)訪問(wèn)端和數(shù)據(jù)擁有端三個(gè)執(zhí)行主體,云服務(wù)器接收到數(shù)據(jù)訪問(wèn)端的模式串匹配串查詢(xún)請(qǐng)求時(shí),獲取模式串匹配查詢(xún)請(qǐng)求中的待匹配模式串,并將該待匹配模式串與預(yù)先存儲(chǔ)的文本串進(jìn)行匹配,當(dāng)待匹配模式串與文本串匹配成功時(shí),云服務(wù)器根據(jù)文本串關(guān)聯(lián)的查詢(xún)數(shù)據(jù)結(jié)構(gòu)和可驗(yàn)證數(shù)據(jù)結(jié)果,獲取匹配成功的結(jié)果所對(duì)應(yīng)的驗(yàn)證證據(jù),并將匹配成功的結(jié)果和驗(yàn)證證據(jù)發(fā)送給數(shù)據(jù)訪問(wèn)端,數(shù)據(jù)訪問(wèn)端再根據(jù)待匹配模式串、匹配成功的驗(yàn)證證據(jù)以及與文本串關(guān)聯(lián)的驗(yàn)證參數(shù),確定該匹配成功的結(jié)果是否正確,其中,可驗(yàn)證數(shù)據(jù)結(jié)構(gòu)是由數(shù)據(jù)擁有端通過(guò)預(yù)設(shè)的哈希函數(shù)對(duì)文本串進(jìn)行預(yù)處理得到的,從而通過(guò)在數(shù)據(jù)擁有端采用預(yù)設(shè)的哈希函數(shù)對(duì)文本串進(jìn)行預(yù)處理,有效地簡(jiǎn)化了可驗(yàn)證數(shù)據(jù)結(jié)構(gòu),進(jìn)而不僅大大減少可云服務(wù)的數(shù)據(jù)存儲(chǔ)量和數(shù)據(jù)運(yùn)算量,而且數(shù)據(jù)訪問(wèn)端也只需存儲(chǔ)固定大小的驗(yàn)證參數(shù),有效地提高了模式串匹配的驗(yàn)證效率。
附圖說(shuō)明
圖1是本發(fā)明實(shí)施例一提供的基于云服務(wù)的模式串匹配驗(yàn)證方法實(shí)現(xiàn)流程圖;
圖2是本發(fā)明實(shí)施例一提供的基于云服務(wù)的模式串匹配驗(yàn)證方法中數(shù)據(jù)擁有端對(duì)文本串進(jìn)行預(yù)處理的實(shí)現(xiàn)流程圖;
圖3是本發(fā)明實(shí)施例一提供的基于云服務(wù)的模式串匹配驗(yàn)證方法中查詢(xún)數(shù)據(jù)結(jié)構(gòu)中后綴數(shù)組的示例圖;
圖4是本發(fā)明實(shí)施例一提供的基于云服務(wù)的模式串匹配驗(yàn)證方法中查詢(xún)數(shù)據(jù)結(jié)構(gòu)中最長(zhǎng)公共前綴數(shù)組的示例圖;
圖5是本發(fā)明實(shí)施例一提供的基于云服務(wù)的模式串匹配驗(yàn)證方法中獲取匹配成功的驗(yàn)證證據(jù)的實(shí)現(xiàn)流程圖;
圖6是本發(fā)明實(shí)施例二提供的基于云服務(wù)的模式串匹配驗(yàn)證裝置的結(jié)構(gòu)示意圖;以及
圖7是本發(fā)明實(shí)施例二提供的基于云服務(wù)的模式串匹配驗(yàn)證裝置的優(yōu)選結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
以下結(jié)合具體實(shí)施例對(duì)本發(fā)明的具體實(shí)現(xiàn)進(jìn)行詳細(xì)描述:
實(shí)施例一:
圖1示出了本發(fā)明實(shí)施例一提供的一種基于云服務(wù)的模式串匹配驗(yàn)證方法實(shí)現(xiàn)流程,為了便于說(shuō)明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分,詳述如下:
在步驟S101中,預(yù)設(shè)云服務(wù)器接收到數(shù)據(jù)訪問(wèn)端的模式串匹配查詢(xún)請(qǐng)求時(shí),獲取模式匹配查詢(xún)請(qǐng)求中的待匹配模式串。
在本發(fā)明實(shí)施例中,當(dāng)用戶(hù)需要進(jìn)行模式串匹配查詢(xún)時(shí),可通過(guò)數(shù)據(jù)訪問(wèn)端向云服務(wù)器發(fā)送模式串匹配查詢(xún)請(qǐng)求,以查詢(xún)待匹配模式串在云服務(wù)器上的匹配結(jié)果并驗(yàn)證該匹配結(jié)果是否正確,其中,待匹配模式串為用戶(hù)輸入的待匹配內(nèi)容。作為示例地,當(dāng)通過(guò)模式串匹配進(jìn)行垃圾郵箱過(guò)濾時(shí),待匹配模式串可為一封郵件中的內(nèi)容,當(dāng)通過(guò)模式串匹配進(jìn)行入侵檢測(cè)時(shí),待匹配模式串可為一串IP地址。
在步驟S102中,云服務(wù)器將待匹配模式串與預(yù)先存儲(chǔ)的文本串進(jìn)行匹配。
在本發(fā)明實(shí)施例中,將待匹配模式串與云服務(wù)器中預(yù)先存儲(chǔ)的文本串在云服務(wù)器中進(jìn)行匹配,該文本串為數(shù)據(jù)擁有端預(yù)先發(fā)送給云服務(wù)器的文本數(shù)據(jù)。作為示例地,當(dāng)通過(guò)模式串匹配進(jìn)行垃圾郵箱過(guò)濾時(shí),文本串可為用于垃圾郵箱過(guò)濾的所有關(guān)鍵字組合而成的文本數(shù)據(jù),當(dāng)通過(guò)模式串匹配進(jìn)行入侵檢測(cè)時(shí),文本串可為經(jīng)統(tǒng)計(jì)所有可能為入侵地址的IP地址組合而成的文本數(shù)據(jù)。
在步驟S103中,當(dāng)待匹配模式串在文本串中匹配成功時(shí),云服務(wù)器根據(jù)文本串關(guān)聯(lián)的查詢(xún)數(shù)據(jù)結(jié)構(gòu)和可驗(yàn)證數(shù)據(jù)結(jié)構(gòu),獲取匹配成功的驗(yàn)證證據(jù),并將匹配成功的結(jié)果和匹配成功的驗(yàn)證證據(jù)發(fā)送給數(shù)據(jù)訪問(wèn)端,可驗(yàn)證數(shù)據(jù)結(jié)構(gòu)由數(shù)據(jù)擁有端通過(guò)預(yù)設(shè)的哈希函數(shù)對(duì)文本串進(jìn)行預(yù)處理得到。
在本發(fā)明實(shí)施例中,當(dāng)待匹配模式串在文本串中查找到一個(gè)匹配位置時(shí),可認(rèn)為待匹配模式串在文本串中匹配成功,此時(shí),云服務(wù)器可根據(jù)與該文本串關(guān)聯(lián)的查詢(xún)數(shù)據(jù)結(jié)構(gòu)和可驗(yàn)證數(shù)據(jù)結(jié)構(gòu),獲取匹配成功的驗(yàn)證證據(jù)。
具體地,如圖2所示,數(shù)據(jù)擁有端對(duì)文本串進(jìn)行預(yù)處理,得到查詢(xún)數(shù)據(jù)結(jié)構(gòu)和可驗(yàn)證數(shù)據(jù)結(jié)構(gòu)可通過(guò)以下步驟實(shí)現(xiàn):
在步驟S201中,數(shù)據(jù)擁有端根據(jù)文本串,生成查詢(xún)數(shù)據(jù)結(jié)構(gòu),查詢(xún)數(shù)據(jù)結(jié)構(gòu)包括文本串的后綴數(shù)組和最長(zhǎng)公共前綴數(shù)組。
文本串被預(yù)先存儲(chǔ)在數(shù)據(jù)擁有端,后綴數(shù)組中存儲(chǔ)文本串中所有后綴字符串的開(kāi)始字符在該文本串對(duì)應(yīng)的位置,最長(zhǎng)公共前綴數(shù)組用來(lái)存儲(chǔ)后綴數(shù)組中當(dāng)前位置的后綴字符串與上一位置的后綴字符串之間的最長(zhǎng)公共前綴長(zhǎng)度,因此在后綴數(shù)組和最長(zhǎng)公共前綴數(shù)組中存儲(chǔ)的數(shù)據(jù)都為整數(shù)數(shù)據(jù),后綴數(shù)組和最長(zhǎng)公共前綴數(shù)組作為查詢(xún)數(shù)據(jù)結(jié)構(gòu)可有效提高后續(xù)待匹配模式串與文本串的匹配過(guò)程。
作為示例地,可先獲取文本串的所有后綴字符串,再將所有后綴字符串按照一定順序(如按照字典順序)進(jìn)行排序,獲取這些后綴字符串中開(kāi)始字符在文本串中的位置,并將這些位置按照后綴字符串排序的順序存儲(chǔ)在后綴數(shù)組中,再根據(jù)后綴數(shù)組,構(gòu)建最長(zhǎng)公共前綴數(shù)組。圖3示出了文本串為”suffix”時(shí)后綴數(shù)組的構(gòu)建過(guò)程,圖4示出了文本串為”suffix”時(shí)最長(zhǎng)公共前綴數(shù)組的構(gòu)建過(guò)程。如圖3所示,S[i]為文本串,SFi為開(kāi)始字符為文本串第i個(gè)字符的后綴字符串,SA[i]為后綴數(shù)組中第i個(gè)元素對(duì)應(yīng)后綴字符串的開(kāi)始字符在文本串中的位置,如圖4所示,LCP[i]為后綴數(shù)組中第i個(gè)元素對(duì)應(yīng)后綴字符串與第i-1個(gè)元素對(duì)應(yīng)后綴字符串的最長(zhǎng)公共前綴長(zhǎng)度。
在步驟S202中,數(shù)據(jù)擁有端根據(jù)哈希函數(shù),生成可驗(yàn)證數(shù)據(jù)結(jié)構(gòu),可驗(yàn)證數(shù)據(jù)結(jié)構(gòu)包括第一累加值集合、第二累加值集合、第一哈希樹(shù)和第二哈希樹(shù)。
在本發(fā)明實(shí)施例中,數(shù)據(jù)擁有端生成可驗(yàn)證數(shù)據(jù)結(jié)構(gòu)的步驟可包括:
(1)數(shù)據(jù)擁有端通過(guò)哈希函數(shù)計(jì)算文本串中每個(gè)后綴字符串的累加值,并將所有后綴字符串的累加值存儲(chǔ)在第一累加值集合中。
具體地,通過(guò)預(yù)設(shè)的哈希函數(shù)對(duì)文本串的每個(gè)后綴字符串進(jìn)行哈希迭代運(yùn)算,以獲取每個(gè)后綴字符串的累加值,哈希迭代運(yùn)算的公式可為:
hai=h(pti||h(pti+1||h(...h(ptn-1||h(ptn))))),1≤i≤n,其中,i為相應(yīng)后綴字符串的開(kāi)始字符在文本串中的位置,hai為第i個(gè)后綴字符串的累加值,h為哈希函數(shù),pti為位置i與位置i在文本串對(duì)應(yīng)的字符構(gòu)成的連接字符串,n為文本串的字符長(zhǎng)度,pti的計(jì)算公式為pti=(i||-||τ[i]),“||”為預(yù)設(shè)的字符連接運(yùn)算符,“-”為預(yù)設(shè)的連接字符,τ表示文本串。因此,第一累加值集合可表示為HA(τ)={hai|1≤i≤n}。
(2)數(shù)據(jù)擁有端根據(jù)后綴數(shù)組和第一累加值集合,生成多個(gè)后綴元組,根據(jù)后綴數(shù)組,構(gòu)建第一哈希樹(shù)并獲取第一哈希樹(shù)根節(jié)點(diǎn)的累加值。
具體地,將后綴數(shù)組和第一累加值集合中的累加值一一對(duì)應(yīng),組合得到多個(gè)后綴元組,再將后綴元組按照后綴數(shù)組的順序,從下至上構(gòu)建第一哈希樹(shù),并可獲得該第一哈希樹(shù)根節(jié)點(diǎn)的累加值。其中,后綴數(shù)組中第i個(gè)元素對(duì)應(yīng)的后綴元組可表示為ti=<i,haSA[i],SA[i]>,haSA[i]為文本串中開(kāi)始字符位置為SA[i]的后綴字符串的累加值,第一哈希樹(shù)的葉子節(jié)點(diǎn)的累加值為對(duì)應(yīng)后綴元組的累加值。
(3)數(shù)據(jù)擁有端根據(jù)后綴數(shù)組和最長(zhǎng)公共前綴數(shù)組,生成多個(gè)匹配元組,通過(guò)哈希函數(shù)計(jì)算匹配元組集合中每個(gè)匹配元組的累加值,并將所有匹配元組的累加值存儲(chǔ)在第二累加值集合中。
具體地,后綴數(shù)組和最長(zhǎng)公共前綴數(shù)組一一對(duì)應(yīng)進(jìn)行組合,可得到多個(gè)匹配元組,該多個(gè)匹配元組包含了文本串與不同待匹配模板串進(jìn)行匹配時(shí)所有可能出現(xiàn)的匹配位置。接著,采用哈希函數(shù)對(duì)每個(gè)匹配元組進(jìn)行哈希迭代運(yùn)算,以得到所有匹配元組對(duì)應(yīng)的累加值。其中,匹配元組可表示為tli=<i,SA[i],LCP[i]>,1≤i≤n,哈希迭代運(yùn)算的公式可為:
Hi=h(tli||h(tli+1||h(...h(tln-1||h(tln))))),1≤i≤n,其中,Hi為匹配元組tli對(duì)應(yīng)的累加值。因此,第二累加值集合可表示為HL(LCP)={Hi|1≤i≤n}。
(4)數(shù)據(jù)擁有端根據(jù)第二累加值集合,構(gòu)建第二哈希樹(shù)并獲取第二哈希樹(shù)根節(jié)點(diǎn)的累加值。
具體地,將第二累加值集合按照一定順序從下至上地構(gòu)建第二哈希樹(shù),可獲得該第一哈希樹(shù)根節(jié)點(diǎn)的累加值。其中,第二哈希樹(shù)葉子節(jié)點(diǎn)的累加值為對(duì)應(yīng)匹配元組的累加值。
在步驟S203中,數(shù)據(jù)擁有端將查詢(xún)數(shù)據(jù)結(jié)構(gòu)和可驗(yàn)證數(shù)據(jù)結(jié)構(gòu)給云服務(wù)器,并將哈希函數(shù)向數(shù)據(jù)訪問(wèn)端發(fā)布,將第一哈希樹(shù)根節(jié)點(diǎn)和第二哈希樹(shù)根節(jié)點(diǎn)的累加值設(shè)置為驗(yàn)證參數(shù)發(fā)送給數(shù)據(jù)訪問(wèn)端。
在本發(fā)明實(shí)施例中,數(shù)據(jù)擁有端通過(guò)上述方式對(duì)文本串進(jìn)行預(yù)處理,得到查詢(xún)數(shù)據(jù)結(jié)構(gòu)和可驗(yàn)證數(shù)據(jù)結(jié)構(gòu),可有效減少云服務(wù)器的數(shù)據(jù)存儲(chǔ)量并提高驗(yàn)證證據(jù)的獲取效率,此外數(shù)據(jù)擁有端在對(duì)文本串預(yù)處理后得到的驗(yàn)證參數(shù)發(fā)送給數(shù)據(jù)訪問(wèn)端,使得數(shù)據(jù)訪問(wèn)段通過(guò)該固定大小的參數(shù),即可完成匹配結(jié)果的驗(yàn)證過(guò)程,有效地提高了模式串匹配驗(yàn)證的效率。
如圖3所示,步驟S103中云服務(wù)器根據(jù)文本串關(guān)聯(lián)的查詢(xún)數(shù)據(jù)結(jié)構(gòu)和可驗(yàn)證數(shù)據(jù)結(jié)構(gòu),獲取匹配成功的驗(yàn)證證據(jù)的步驟可包括:
在步驟S301中,獲取待匹配模式串在文本串中的當(dāng)前匹配位置,根據(jù)查詢(xún)數(shù)據(jù)結(jié)構(gòu),獲取預(yù)設(shè)數(shù)量個(gè)匹配元組,預(yù)設(shè)數(shù)量個(gè)匹配元組中包含待匹配模式串在文本串中所有匹配成功的匹配位置。
在本發(fā)明實(shí)施例中,可根據(jù)當(dāng)前匹配位置和查詢(xún)數(shù)據(jù)結(jié)構(gòu),查找出文本串中所有可以與待匹配模式串匹配成功的匹配位置,并通過(guò)匹配元組表示出來(lái),這里的匹配位置是指與待匹配模式串進(jìn)行匹配的后綴字符串中開(kāi)始字符在文本串中的位置,預(yù)設(shè)數(shù)量為匹配次數(shù)進(jìn)行加一操作后得到的數(shù)值。
在具體實(shí)施過(guò)程中,可先確定當(dāng)前匹配位置在最長(zhǎng)公共前綴數(shù)組中對(duì)應(yīng)的下標(biāo),從該下標(biāo)開(kāi)始往前后兩端搜索該最長(zhǎng)公共前綴數(shù)組,將最長(zhǎng)公共前綴數(shù)組中的最長(zhǎng)公共前綴長(zhǎng)度與待匹配模式串長(zhǎng)度進(jìn)行比較,當(dāng)最長(zhǎng)公共前綴長(zhǎng)度不小于待匹配模式串長(zhǎng)度時(shí),獲取該最長(zhǎng)公共前綴長(zhǎng)度在后綴數(shù)組中對(duì)應(yīng)的數(shù)組元素,進(jìn)而可得到預(yù)設(shè)數(shù)量個(gè)對(duì)應(yīng)的匹配元組,匹配元組的表達(dá)公式可為tlj=<j,SA[j],LCP[j]>,start≤j≤end,其中start和end分別表示匹配元組下標(biāo)的開(kāi)始位置和結(jié)束位置。
在步驟S302中,根據(jù)當(dāng)前匹配位置和待匹配模式串,在第一累加值集合中查找相關(guān)后綴字符串的累加值,并根據(jù)第一哈希樹(shù),獲取用于驗(yàn)證待匹配模式串是否存在于文本串中的證據(jù),并將證據(jù)設(shè)置為第一子證據(jù)。
在本發(fā)明實(shí)施例中,當(dāng)前匹配位置可通過(guò)后綴數(shù)組中數(shù)組元素SA[i]進(jìn)行表示,根據(jù)當(dāng)前匹配位置和待匹配模式串的長(zhǎng)度之和可確定相關(guān)后綴字符串的開(kāi)始字符在文本串中的位置,因此相關(guān)后綴字符串的累加值可表示為haSA[i]+m,m為待匹配模式串的長(zhǎng)度。在獲取第一子證據(jù)時(shí),可先在第一累加值集合中查找當(dāng)前匹配位置所對(duì)應(yīng)后綴字符串的累加值,以獲取對(duì)應(yīng)的后綴元組ti=<i,haSA[i],SA[i]>,接著,在第一哈希樹(shù)中查找該后綴元組哈希累加值所對(duì)應(yīng)的葉子節(jié)點(diǎn),將該葉子節(jié)點(diǎn)到根節(jié)點(diǎn)的路徑設(shè)置為第一驗(yàn)證證據(jù),具體地,第一驗(yàn)證證據(jù)中包含該葉子節(jié)點(diǎn)到根節(jié)點(diǎn)路徑上的結(jié)點(diǎn)以及這些結(jié)點(diǎn)的兄弟結(jié)點(diǎn)。
在步驟S303中,在第二累加值集合中查找預(yù)設(shè)數(shù)量個(gè)匹配元組中預(yù)設(shè)位置處匹配元組的累加值,并根據(jù)第二哈希樹(shù),獲取用于驗(yàn)證預(yù)設(shè)數(shù)量個(gè)匹配元組中開(kāi)始位置處匹配元組是否真實(shí)的證據(jù),并將證據(jù)設(shè)置為第二子證據(jù)。
在本發(fā)明實(shí)施例中,預(yù)設(shè)位置為預(yù)設(shè)數(shù)量個(gè)匹配元組中結(jié)束位置的下一位置,所以預(yù)設(shè)位置處匹配元組的累加值可表示為Hend+1,在獲取第二子證據(jù)的過(guò)程中,可先在第二累加值集合中查找開(kāi)始位置處匹配元組的累加值,接著,在第二哈希樹(shù)中查找該開(kāi)始位置處匹配元組的累加值對(duì)應(yīng)的葉子節(jié)點(diǎn),將該葉子節(jié)點(diǎn)到第二哈希樹(shù)根節(jié)點(diǎn)的路徑設(shè)置為第二子證據(jù),具體地,第二子證據(jù)可包括該路徑上的結(jié)點(diǎn)和節(jié)點(diǎn)的兄弟結(jié)點(diǎn)。
在步驟S304中,根據(jù)當(dāng)前匹配位置、預(yù)設(shè)數(shù)量個(gè)匹配元組、相關(guān)后綴字符串的累加值、第一子證據(jù)、預(yù)設(shè)位置處匹配元組的累加值以及第二子證據(jù)生成匹配成功的驗(yàn)證證據(jù)。
具體地,匹配成功的驗(yàn)證證據(jù)的表達(dá)公式可為:
pro(p)={i,SA[i],{tlj=<j,SA[j],LCP[j]>,start≤j≤end},haSA[i]+m,Hend+1,proofi,prooftl},其中,proofi為第一子證據(jù),prooftl為第二字證據(jù)。
在本發(fā)明實(shí)施例中,云服務(wù)器根據(jù)文本串關(guān)聯(lián)的查詢(xún)數(shù)據(jù)結(jié)構(gòu)和可驗(yàn)證數(shù)據(jù)結(jié)構(gòu),通過(guò)上述步驟獲取匹配成功的驗(yàn)證證據(jù),可有效地提高匹配成功的驗(yàn)證證據(jù)的獲取效率。
在步驟S104中,數(shù)據(jù)訪問(wèn)端根據(jù)待匹配模式串、匹配成功的驗(yàn)證證據(jù)以及與文本串關(guān)聯(lián)的驗(yàn)證參數(shù),確定匹配成功的結(jié)果是否正確。
在本發(fā)明實(shí)施例中,數(shù)據(jù)訪問(wèn)端根據(jù)云服務(wù)發(fā)送過(guò)來(lái)的驗(yàn)證證據(jù)、待匹配模式串、數(shù)據(jù)終端預(yù)先發(fā)送的驗(yàn)證參數(shù)以及公開(kāi)的哈希函數(shù),完成驗(yàn)證匹配成功結(jié)果的驗(yàn)證過(guò)程,具體的驗(yàn)證步驟包括:
(1)根據(jù)待匹配模式串、哈希函數(shù)以及相關(guān)后綴字符串的累加值,計(jì)算當(dāng)前匹配位置在文本串中所對(duì)應(yīng)后綴字符串的累加值,并根據(jù)累加值、后綴數(shù)組、第一子證據(jù)以及第一哈希樹(shù)根節(jié)點(diǎn)的累加值,確定當(dāng)前匹配位置是否正確。
在本發(fā)明實(shí)施例中,當(dāng)前匹配位置在文本串中與后綴字符串對(duì)應(yīng),表明該后綴字符串的開(kāi)始字符在文本串的位置為當(dāng)前匹配位置,計(jì)算該后綴字符串累加值的具體公式可為:ha'SA[i]=h(pt1'||h(pt'2||h(...h(pt'm||haSA[i])...))),
其中,pt'j的計(jì)算公式為pt'j=(SA[i]+j-1||-||p[j]),1≤j≤m,p為待匹配模式串。接著,將該后綴字符串的累加值ha'SA[i]與當(dāng)前匹配位置SA[i]組合構(gòu)成一個(gè)后綴元組,根據(jù)第一子證據(jù)和第一哈希樹(shù)根節(jié)點(diǎn)的累加值,驗(yàn)證該后綴元組是否正確,當(dāng)該后綴元組正確時(shí),可確定當(dāng)前匹配位置正確。
(2)根據(jù)待匹配模式串、哈希函數(shù)以及預(yù)設(shè)位置處匹配元組的累加值,計(jì)算預(yù)設(shè)數(shù)量個(gè)匹配元組中開(kāi)始位置處匹配元組的累加值,并根據(jù)累加值、第二子證據(jù)以及第二哈希樹(shù)根節(jié)點(diǎn)的累加值,確定預(yù)設(shè)數(shù)量個(gè)匹配元組包含的所有匹配位置中剩余匹配位置是否正確。
在本發(fā)明實(shí)施例中,預(yù)設(shè)數(shù)量個(gè)匹配元組中開(kāi)始位置處匹配元組tlstart的累加值計(jì)算公式為:H'start=h(tlstart||h(tlstart+1||h(...h(tlend||Hend+1)...))),其中Hend+1為預(yù)設(shè)位置處匹配元組的累加值。接著,根據(jù)開(kāi)始位置處匹配元組tlstart、第二子證據(jù)以及第二哈希樹(shù)根節(jié)點(diǎn)的累加值,確定預(yù)設(shè)數(shù)量個(gè)匹配元組包含的所有匹配位置中剩余匹配位置是否正確。
(3)當(dāng)確定當(dāng)前匹配位置和剩余匹配位置正確時(shí),確定匹配成功的結(jié)果正確。
優(yōu)選地,當(dāng)待匹配模式串與文本串在云服務(wù)器中匹配失敗時(shí),云服務(wù)器同樣可獲取到匹配失敗的驗(yàn)證證據(jù),并將匹配失敗的結(jié)果和匹配失敗的驗(yàn)證證據(jù)發(fā)送給數(shù)據(jù)訪問(wèn)端,數(shù)據(jù)訪問(wèn)端根據(jù)該匹配失敗的驗(yàn)證證據(jù),可驗(yàn)證該匹配失敗的結(jié)果是否正確。
在本發(fā)明實(shí)施例中,云服務(wù)器獲取匹配失敗驗(yàn)證證據(jù)的步驟包括:
(1)當(dāng)待匹配模式串與文本串匹配失敗時(shí),根據(jù)待匹配模式串在文本串中當(dāng)前匹配失敗的位置和后綴數(shù)組,分別獲取第一后綴字符串和第二后綴字符串在文本串所對(duì)應(yīng)的位置,第一后綴字符串和第二后綴字符串在后綴數(shù)組中位置前后相鄰。
具體地,第一后綴字符串開(kāi)始字符在文本串中的位置可為當(dāng)前匹配失敗的位置,根據(jù)不同后綴字符串在后綴數(shù)組中對(duì)應(yīng)不同的數(shù)組元素,因此可根據(jù)第一后綴字符串在后綴數(shù)組中對(duì)應(yīng)數(shù)組元素的位置,將下一位置數(shù)組元素對(duì)應(yīng)的后綴字符串設(shè)置為第二后綴字符串。
(2)根據(jù)第一后綴字符串和待匹配模式串,獲取文本串中第一相關(guān)位置處的字符,在第一累加值集合中查找第一相關(guān)位置的下一位置所對(duì)應(yīng)后綴字符串的累加值,并根據(jù)第一哈希樹(shù),獲取用于驗(yàn)證第一后綴字符串存在于文本串中的第三子證據(jù)。
在本發(fā)明實(shí)施例中,獲取第一后綴字符串與待匹配模式串之間的最長(zhǎng)公共前綴長(zhǎng)度l1,在文本串中查找該第一后綴字符串中的第l1+1個(gè)字符,該字符即為第一相關(guān)位置處的字符,第一相關(guān)位置可表示為SA[i]+l1。第一相關(guān)位置的下一位置所對(duì)應(yīng)后綴字符串的累加值可表示為haSA[i]+l1+1,在第一哈希樹(shù)中查找該累加值對(duì)應(yīng)的葉子節(jié)點(diǎn),將該葉子節(jié)點(diǎn)到第一哈希樹(shù)根節(jié)點(diǎn)的路徑設(shè)置為第三子證據(jù),具體地,第三子證據(jù)包括該路徑上的結(jié)點(diǎn)和結(jié)點(diǎn)的兄弟結(jié)點(diǎn)。
(3)根據(jù)第二后綴字符串和待匹配模式串,獲取文本串中第二相關(guān)位置處的字符,在第一累加值集合中查找第二相關(guān)位置的下一位置所對(duì)應(yīng)后綴字符串的累加值,并根據(jù)第一哈希樹(shù),獲取用于驗(yàn)證第二后綴字符串存在于文本串中的第四子證據(jù)。
在本發(fā)明實(shí)施例中,同上述步驟一樣,獲取第二后綴字符串與待匹配模式串之間的最長(zhǎng)公共前綴長(zhǎng)度l2,在文本串中查找該第二后綴字符串中的第l2+1個(gè)字符,該字符即為第二相關(guān)位置處的字符,第二相關(guān)位置可表示為SA[i]+l2。第二相關(guān)位置的下一位置所對(duì)應(yīng)后綴字符串的累加值可表示為haSA[i]+l2+1,在第一哈希樹(shù)中查找該累加值對(duì)應(yīng)的葉子節(jié)點(diǎn),將該葉子節(jié)點(diǎn)到第一哈希樹(shù)根節(jié)點(diǎn)的路徑設(shè)置為第四子證據(jù),具體地,第四子證據(jù)包括該路徑上的結(jié)點(diǎn)和結(jié)點(diǎn)的兄弟結(jié)點(diǎn)。
(5)根據(jù)當(dāng)前匹配失敗的位置、第一相關(guān)位置處的字符、第一相關(guān)位置的下一位置所對(duì)應(yīng)后綴字符串的累加值、第三子證據(jù)、第二相關(guān)位置處的字符、第二相關(guān)位置的下一位置所對(duì)應(yīng)后綴字符串的累加值和第四子證據(jù),生成匹配失敗的驗(yàn)證證據(jù)。
具體地,匹配失敗的驗(yàn)證證據(jù)的表達(dá)公式可為:
其中,proofi'為第三子證據(jù),proof'i+1為第四子證據(jù)。
(5)云服務(wù)器將匹配失敗的結(jié)果和匹配失敗的驗(yàn)證證據(jù)發(fā)送給數(shù)據(jù)訪問(wèn)端。在本發(fā)明實(shí)施例中,根據(jù)后綴數(shù)組、第一累加值集合以及第一哈希樹(shù),成功獲取到匹配失敗的驗(yàn)證證據(jù),不僅有效地提高了驗(yàn)證證據(jù)獲取的速率,而且有效地提高了驗(yàn)證證據(jù)的簡(jiǎn)潔度。
在本發(fā)明實(shí)施例中,數(shù)據(jù)訪問(wèn)端驗(yàn)證匹配失敗的結(jié)果可包括下述步驟:
(1)數(shù)據(jù)訪問(wèn)端根據(jù)匹配失敗的驗(yàn)證證據(jù),確定第一后綴字符串和第二后綴字符串在后綴數(shù)組中的位置是否相鄰。
(2)當(dāng)?shù)谝缓缶Y字符串與第二后綴字符串位置相鄰時(shí),將第一相關(guān)位置處的字符與待匹配模式串中第一預(yù)設(shè)位置處的字符進(jìn)行比較,以確定第一后綴字符串是否小于待匹配模式串,將第二相關(guān)位置處的字符與待匹配字符串中第二預(yù)設(shè)位置處的字符進(jìn)行比較,以確定第二后綴字符串是否大于待匹配模式串。
在本發(fā)明實(shí)施例中,第一預(yù)設(shè)位置的表達(dá)公式可為p[l1+1],第二預(yù)設(shè)位置的表達(dá)公式可為p[l2+1],其中p為待匹配模式串。
(3)當(dāng)確定第一后綴字符串小于待匹配模式串、且第二后綴字符串大于待匹配模式串時(shí),根據(jù)哈希函數(shù)、第一相關(guān)位置的下一位置所對(duì)應(yīng)后綴字符串的累加值以及第二相關(guān)位置的下一位置所對(duì)應(yīng)后綴字符串的累加值,分別計(jì)算第一后綴字符串、第二后綴字符串的累加值。
(4)根據(jù)第三子證據(jù)和第一哈希樹(shù)根節(jié)點(diǎn)的累加值,確定第一后綴字符串是否存在于文本串中,根據(jù)第四子證據(jù)和第一哈希樹(shù)根節(jié)點(diǎn)的累加值,確定第二后綴字符串是否存在于在文本串中。
(5)當(dāng)確定第一后綴字符串和第二后綴字符串都存在于文本串中時(shí),確定待匹配模式串與文本串匹配失敗。
在本發(fā)明實(shí)施例中,在數(shù)據(jù)擁有端根據(jù)文本串構(gòu)建查詢(xún)數(shù)據(jù)結(jié)構(gòu),并采用哈希函數(shù)對(duì)文本串進(jìn)行預(yù)處理得到可驗(yàn)證數(shù)據(jù)結(jié)構(gòu),通過(guò)該查詢(xún)數(shù)據(jù)結(jié)構(gòu)和可驗(yàn)證數(shù)據(jù)結(jié)構(gòu),不僅減少了云服務(wù)的數(shù)據(jù)存儲(chǔ)量和數(shù)據(jù)運(yùn)算量,而且提高了云服務(wù)器獲取匹配結(jié)果和驗(yàn)證證據(jù)的效率,與此同時(shí),數(shù)據(jù)擁有端發(fā)送給數(shù)據(jù)訪問(wèn)端固定大小的驗(yàn)證參數(shù),有效地簡(jiǎn)化了數(shù)據(jù)訪問(wèn)端驗(yàn)證匹配結(jié)果的驗(yàn)證過(guò)程,大大地提高了模式串匹配的驗(yàn)證效率。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分步驟是可以通過(guò)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,所述的存儲(chǔ)介質(zhì),如ROM/RAM、磁盤(pán)、光盤(pán)等。
實(shí)施例二:
圖6示出了本發(fā)明實(shí)施例二提供的一種基于云服務(wù)的模式串匹配驗(yàn)證裝置的結(jié)構(gòu),為了便于說(shuō)明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分,其中包括:
模式串獲取模塊61,用于預(yù)設(shè)云服務(wù)器接收到數(shù)據(jù)訪問(wèn)端的模式串匹配查詢(xún)請(qǐng)求時(shí),獲取模式串匹配查詢(xún)請(qǐng)求中的待匹配模式串;
模式串匹配模塊62,用于云服務(wù)器將待匹配模式串與預(yù)先存儲(chǔ)的文本串進(jìn)行匹配;
證據(jù)獲取模塊63,用于當(dāng)待匹配模式串在文本串中匹配成功時(shí),云服務(wù)器根據(jù)文本串關(guān)聯(lián)的查詢(xún)數(shù)據(jù)結(jié)構(gòu)和可驗(yàn)證數(shù)據(jù)結(jié)構(gòu),獲取匹配成功的驗(yàn)證證據(jù),并將匹配成功的結(jié)果和匹配成功的驗(yàn)證證據(jù)發(fā)送給數(shù)據(jù)訪問(wèn)端,可驗(yàn)證數(shù)據(jù)結(jié)構(gòu)由數(shù)據(jù)擁有端通過(guò)預(yù)設(shè)的哈希函數(shù)對(duì)文本串進(jìn)行預(yù)處理得到;以及
驗(yàn)證模塊64,用于數(shù)據(jù)訪問(wèn)端根據(jù)待匹配模式串、匹配成功的驗(yàn)證證據(jù)以及與文本串關(guān)聯(lián)的驗(yàn)證參數(shù),確定匹配成功的結(jié)果是否正確。
在本發(fā)明實(shí)施例中,如圖7所示,該模式串匹配驗(yàn)證裝置還可以包括:
查詢(xún)數(shù)據(jù)獲取模塊71,用于數(shù)據(jù)擁有端根據(jù)文本串,生成查詢(xún)數(shù)據(jù)結(jié)構(gòu),查詢(xún)數(shù)據(jù)結(jié)構(gòu)包括文本串的后綴數(shù)組和最長(zhǎng)公共前綴數(shù)組;
可驗(yàn)證數(shù)據(jù)獲取模塊72,用于數(shù)據(jù)擁有端根據(jù)哈希函數(shù),生成可驗(yàn)證數(shù)據(jù)結(jié)構(gòu),可驗(yàn)證數(shù)據(jù)結(jié)構(gòu)包括第一累加值集合、第二累加值集合、第一哈希樹(shù)和第二哈希樹(shù);以及
數(shù)據(jù)擁有端發(fā)送模塊73,用于數(shù)據(jù)擁有端將查詢(xún)數(shù)據(jù)結(jié)構(gòu)和可驗(yàn)證數(shù)據(jù)結(jié)構(gòu)發(fā)送給云服務(wù)器,并將哈希函數(shù)向數(shù)據(jù)訪問(wèn)端發(fā)布,將第一哈希樹(shù)根節(jié)點(diǎn)和第二哈希樹(shù)根節(jié)點(diǎn)的累加值設(shè)置為驗(yàn)證參數(shù)發(fā)送給數(shù)據(jù)訪問(wèn)端。
優(yōu)選地,可驗(yàn)證數(shù)據(jù)獲取模塊72包括:
第一哈希計(jì)算模塊721,用于數(shù)據(jù)擁有端根據(jù)哈希函數(shù),計(jì)算文本串中每個(gè)后綴字符串的累加值,并將所有后綴字符串的累加值存儲(chǔ)在第一累加值集合中;
第一哈希樹(shù)構(gòu)建模塊722,用于數(shù)據(jù)擁有端根據(jù)后綴數(shù)組和第一累加值集合,生成多個(gè)后綴元組,并根據(jù)后綴數(shù)組,構(gòu)建第一哈希樹(shù)并獲取第一哈希樹(shù)根節(jié)點(diǎn)的累加值;
第二哈希計(jì)算模塊723,用于數(shù)據(jù)擁有端根據(jù)后綴數(shù)組和最長(zhǎng)公共前綴數(shù)組,生成多個(gè)匹配元組,根據(jù)哈希函數(shù),計(jì)算匹配元組集合中每個(gè)匹配元組的累加值,并將所有匹配元組的累加值存儲(chǔ)在第二累加值集合中;以及
第二哈希樹(shù)建立模塊724,用于數(shù)據(jù)擁有端根據(jù)第二累加值集合,構(gòu)建第二哈希樹(shù)并獲取第二哈希函數(shù)根節(jié)點(diǎn)的累加值。
在本發(fā)明實(shí)施例中,在數(shù)據(jù)擁有端根據(jù)文本串構(gòu)建查詢(xún)數(shù)據(jù)結(jié)構(gòu),并采用哈希函數(shù)對(duì)文本串進(jìn)行預(yù)處理得到可驗(yàn)證數(shù)據(jù)結(jié)構(gòu),通過(guò)該查詢(xún)數(shù)據(jù)結(jié)構(gòu)和可驗(yàn)證數(shù)據(jù)結(jié)構(gòu),不僅減少了云服務(wù)的數(shù)據(jù)存儲(chǔ)量和數(shù)據(jù)運(yùn)算量,而且提高了云服務(wù)器獲取匹配結(jié)果和驗(yàn)證證據(jù)的效率,與此同時(shí),數(shù)據(jù)擁有端發(fā)送給數(shù)據(jù)訪問(wèn)端固定大小的驗(yàn)證參數(shù),有效地簡(jiǎn)化了數(shù)據(jù)訪問(wèn)端驗(yàn)證匹配結(jié)果的驗(yàn)證過(guò)程,大大地提高了模式串匹配的驗(yàn)證效率。
在本發(fā)明實(shí)施例中,基于云服務(wù)的模式串匹配驗(yàn)證裝置的各單元可由相應(yīng)的硬件或軟件單元實(shí)現(xiàn),各單元可以為獨(dú)立的軟、硬件單元,也可以集成為一個(gè)軟、硬件單元,在此不用以限制本發(fā)明。各單元的具體實(shí)施方式可參考前述實(shí)施例一中各步驟的描述,在此不再贅述。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。