1.一種云關(guān)系數(shù)據(jù)庫(kù)的浮點(diǎn)數(shù)據(jù)的加密及查詢方法,其特征在于,包含以下步驟:
將浮點(diǎn)數(shù)據(jù)的密文插入到云數(shù)據(jù)庫(kù):
A、用戶輸入包含浮點(diǎn)數(shù)據(jù)的插入語(yǔ)句,對(duì)浮點(diǎn)數(shù)進(jìn)行編碼,通過(guò)編碼規(guī)則將浮點(diǎn)數(shù)的小數(shù)點(diǎn)位置和正負(fù)號(hào)隱藏起來(lái);
B、利用同態(tài)加密算法Paillier對(duì)編碼后的每一組分別進(jìn)行加密;
C、將加密后的編碼值存入云數(shù)據(jù)庫(kù);
對(duì)用戶對(duì)浮點(diǎn)數(shù)的SUM查詢:
通過(guò)對(duì)存貯在云數(shù)據(jù)庫(kù)的浮點(diǎn)數(shù)不解密的情況下進(jìn)行SUM求和,具體步驟為:
a、將存貯在云數(shù)據(jù)庫(kù)的浮點(diǎn)數(shù)密文轉(zhuǎn)換為雙鏈表二叉樹(shù);
b、利用雙鏈表二叉樹(shù)分別對(duì)正浮點(diǎn)數(shù)、負(fù)浮點(diǎn)數(shù)求和得到X、Y;
c、將云數(shù)據(jù)庫(kù)所求得的X、Y的密文傳送到用戶客戶端,再利用同態(tài)加密算法Paillier對(duì)X、Y進(jìn)行解密;
d、采用雙鏈表二叉樹(shù)的結(jié)構(gòu)對(duì)X、Y進(jìn)行校正,使X、Y符合編碼規(guī)則;
e、對(duì)校正后的X、Y按編碼運(yùn)算規(guī)則進(jìn)行一次正、負(fù)數(shù)的求和運(yùn)算,得到浮點(diǎn)數(shù)的SUM函數(shù)最終結(jié)果的編碼值;
f、將SUM函數(shù)編碼值按編碼規(guī)則進(jìn)行解碼即為用戶查詢的結(jié)果。
2.根據(jù)權(quán)利要求1所述云關(guān)系數(shù)據(jù)庫(kù)的浮點(diǎn)數(shù)據(jù)的加密及查詢方法,其特征在于,步驟A中,所述編碼規(guī)則如下:
將浮點(diǎn)數(shù)的編碼分為標(biāo)志位和數(shù)字組二部分:標(biāo)志位/指數(shù)位F,[數(shù)字組1,數(shù)字組2,……,數(shù)字組N,……,數(shù)字組20];
(1)劃分:按照浮點(diǎn)數(shù)的十進(jìn)制小數(shù)形式以小數(shù)點(diǎn)為界,整數(shù)部分從小數(shù)點(diǎn)位置開(kāi)始向最高位方向每二位為一組,最高位不夠二位的補(bǔ)0;小數(shù)部分從小數(shù)點(diǎn)位置開(kāi)始向最低位方向每二位為一組,最低位不夠二位的補(bǔ)0;數(shù)字組的順序與浮點(diǎn)數(shù)十進(jìn)制數(shù)字順序一致;
(2)符號(hào)位表示:設(shè)浮點(diǎn)數(shù)編碼的標(biāo)志位為F,標(biāo)志位F大于193的為正數(shù),標(biāo)志位F小于62的為負(fù)數(shù),標(biāo)志位F為193或62時(shí)分別表示正零或負(fù)零;
(3)小數(shù)點(diǎn)位置:設(shè)浮點(diǎn)數(shù)編碼的標(biāo)志位為F,F(xiàn)-193+1為正數(shù)的整數(shù)部分的組數(shù),62-F+1為負(fù)數(shù)的整數(shù)部分的組數(shù),除掉整數(shù)部分的組數(shù)后剩余的組數(shù)為小數(shù)部分;
(4)數(shù)字組的編碼:設(shè)劃分的每一組的數(shù)字值為N,正數(shù)的編碼為N,負(fù)數(shù)的編碼為100-N。
3.根據(jù)權(quán)利要求2所述云關(guān)系數(shù)據(jù)庫(kù)的浮點(diǎn)數(shù)據(jù)的加密及查詢方法,其特征在于,所述步驟B具體為:
1)標(biāo)志位F不進(jìn)行加密;
2)按數(shù)字組順序,每個(gè)數(shù)字組N用Paillier算法按正整數(shù)的形式進(jìn)行加密,加密后每個(gè)節(jié)點(diǎn)的長(zhǎng)度是不固定。
4.根據(jù)權(quán)利要求3所述云關(guān)系數(shù)據(jù)庫(kù)的浮點(diǎn)數(shù)據(jù)的加密及查詢方法,其特征在于,所述步驟C具體為:
數(shù)字組加密后,在組之間設(shè)置分隔符;由標(biāo)志位、組的加密串和分隔符組成的字符串存儲(chǔ)在云關(guān)系數(shù)據(jù)庫(kù)中。
5.根據(jù)權(quán)利要求2所述云關(guān)系數(shù)據(jù)庫(kù)的浮點(diǎn)數(shù)據(jù)的加密及查詢方法,其特征在于,所述步驟b具體為:
1)初始化二棵只有根結(jié)點(diǎn)的雙鏈表二叉樹(shù),正數(shù)的和樹(shù)AST根結(jié)點(diǎn)值為193,負(fù)數(shù)的和樹(shù)MST根節(jié)點(diǎn)值為62;
2)依次讀取浮點(diǎn)屬性的屬性值,若所有屬性值已讀完,則進(jìn)入步驟6),否則進(jìn)入步驟3);
3)按編碼串的遍歷方式恢復(fù)雙鏈表二叉樹(shù)T:標(biāo)志位F為根結(jié)點(diǎn);若標(biāo)志位大于62則F-192為左子樹(shù)節(jié)點(diǎn)數(shù),否則62-F為左子樹(shù)節(jié)點(diǎn)數(shù),編碼順序?yàn)樽罅藰?shù)的反向鏈表;剩余數(shù)字串為右子樹(shù),編碼順序?yàn)檎蜴湵恚换謴?fù)左子樹(shù)的正向鏈表和右子樹(shù)的反向鏈表;
4)由標(biāo)志位判斷為正數(shù),則
4.1)若AST根節(jié)點(diǎn)值大于T根節(jié)點(diǎn)值,則AST根節(jié)點(diǎn)值改為T(mén)根節(jié)點(diǎn)值,否則進(jìn)入步驟4.2);
4.2)正向遍歷AST和T的右子樹(shù),若AST和T的節(jié)點(diǎn)都不為空則進(jìn)入步驟4.2.1),否則進(jìn)入步驟4.2.3):
4.2.1)AST和T相同層的節(jié)點(diǎn)值相加,和為AST當(dāng)前節(jié)點(diǎn)的值;
4.2.2)訪問(wèn)AST和T的下一個(gè)節(jié)點(diǎn),進(jìn)入步驟4.2);
4.2.3)若T的節(jié)點(diǎn)為空,則進(jìn)入步驟4.3),否則進(jìn)入步驟4.2.4);
4.2.4)新建AST的葉子節(jié)點(diǎn),將T當(dāng)前節(jié)點(diǎn)值復(fù)制到AST的葉子節(jié)點(diǎn);
4.2.5)訪問(wèn)T的下一個(gè)節(jié)點(diǎn),進(jìn)入步驟4.2.3);
4.3)正向遍歷AST和T的左子樹(shù),若AST和T的節(jié)點(diǎn)都不為空則進(jìn)入步驟4.3.1),否則進(jìn)入步驟4.3.3):
4.3.1)AST和T相同層的節(jié)點(diǎn)值相加,和為AST當(dāng)前節(jié)點(diǎn)的值;
4.3.2)訪問(wèn)AST和T的下一個(gè)節(jié)點(diǎn),進(jìn)入步驟4.3);
4.3.3)若T的節(jié)點(diǎn)為空,則進(jìn)入步驟2),否則進(jìn)入步驟4.3.4);
4.3.4)新建AST的葉子節(jié)點(diǎn),將T當(dāng)前節(jié)點(diǎn)值復(fù)制到AST的葉子節(jié)點(diǎn);
4.3.5)訪問(wèn)T的下一個(gè)節(jié)點(diǎn),進(jìn)入步驟4.3.3);
5)由標(biāo)志位判斷為負(fù)數(shù),則
5.1)若MST根節(jié)點(diǎn)值小于T根節(jié)點(diǎn)值,則MST根節(jié)點(diǎn)值改為T(mén)根節(jié)點(diǎn)值,否則進(jìn)入步驟5.2);
5.2)正向遍歷AST和T的右子樹(shù),若MST和T的節(jié)點(diǎn)都不為空則進(jìn)入步驟5.2.1),否則進(jìn)入步驟5.2.3);
5.2.1)MST和T相同層的節(jié)點(diǎn)值相加,和為MST當(dāng)前節(jié)點(diǎn)的值;
5.2.2)訪問(wèn)MST和T的下一個(gè)節(jié)點(diǎn),進(jìn)入步驟5.2);
5.2.3)若T的節(jié)點(diǎn)為空,則進(jìn)入步驟5.3),否則進(jìn)入步驟5.2.4);
5.2.4)新建MST的葉子節(jié)點(diǎn),將T當(dāng)前節(jié)點(diǎn)值復(fù)制到MST的葉子節(jié)點(diǎn);
5.2.5)訪問(wèn)T的下一個(gè)節(jié)點(diǎn),進(jìn)入步驟5.2.3);
5.3)正向遍歷MST和T的左子樹(shù),若MST和T的節(jié)點(diǎn)都不為空則進(jìn)入步驟5.3.1),否則進(jìn)入步驟4.3.3);
5.3.1)MST和T相同層的節(jié)點(diǎn)值相加,和為MST當(dāng)前節(jié)點(diǎn)的值;
5.3.2)訪問(wèn)MST和T的下一個(gè)節(jié)點(diǎn),進(jìn)入步驟5.3);
5.3.3)若T的節(jié)點(diǎn)為空,則進(jìn)入步驟2),否則進(jìn)入步驟5.3.4);
5.3.4)新建MST的葉子節(jié)點(diǎn),將T當(dāng)前節(jié)點(diǎn)值復(fù)制到MST的葉子節(jié)點(diǎn);
5.3.5)訪問(wèn)T的下一個(gè)節(jié)點(diǎn),進(jìn)入步驟5.3.3);
6)輸出二個(gè)數(shù)字串:按AST和MST的根節(jié)點(diǎn)、左子樹(shù)的反向遍歷、右子樹(shù)的正向遍歷及分隔符組成的數(shù)字串。
6.根據(jù)權(quán)利要求2所述云關(guān)系數(shù)據(jù)庫(kù)的浮點(diǎn)數(shù)據(jù)的加密及查詢方法,其特征在于,所述步驟c具體為:
對(duì)正數(shù)和AST或負(fù)數(shù)和MST的數(shù)字串,除標(biāo)志位外,對(duì)分隔符間隔開(kāi)的每個(gè)數(shù)字串用Paillier算法進(jìn)行解密;
恢復(fù)AST或MST的雙鏈表二叉樹(shù)T:標(biāo)志位為根節(jié)點(diǎn);由標(biāo)志位確定左子樹(shù)的節(jié)點(diǎn)數(shù),按節(jié)點(diǎn)數(shù)將分隔符間隔的數(shù)字串順序建立左子樹(shù)的反向鏈表;剩余的數(shù)字串按順序建立右子樹(shù)的正向鏈表;恢復(fù)左子樹(shù)的正向鏈表和右子樹(shù)的反向鏈表。
7.根據(jù)權(quán)利要求6所述云關(guān)系數(shù)據(jù)庫(kù)的浮點(diǎn)數(shù)據(jù)的加密及查詢方法,其特征在于,所述步驟d具體為:
(1)初始化進(jìn)位變量C為0;
(2)若樹(shù)T的右子樹(shù)反向鏈表當(dāng)前節(jié)點(diǎn)為空節(jié)點(diǎn)則重復(fù)步驟(2),否則轉(zhuǎn)步驟(2.1):
(2.1)將當(dāng)前節(jié)點(diǎn)值保存在變量N,修改當(dāng)前節(jié)點(diǎn)值為(N+C)mod 100,修改進(jìn)位變量C=(N+C)/100;
(2.2)繼續(xù)訪問(wèn)T右子樹(shù)反向鏈表的下一個(gè)節(jié)點(diǎn),重復(fù)步驟(2);
(3)若樹(shù)T的左子樹(shù)正向鏈表當(dāng)前節(jié)點(diǎn)為空節(jié)點(diǎn)則進(jìn)入步驟(4),否則進(jìn)入步驟(3.1):
(3.1)將當(dāng)前節(jié)點(diǎn)值保存在變量N,修改當(dāng)前節(jié)點(diǎn)值為(N+C)mod 100,修改進(jìn)位變量C=(N+C)/100;
(3.2)繼續(xù)訪問(wèn)T右子樹(shù)反向鏈表的下一個(gè)節(jié)點(diǎn),進(jìn)入步驟(2);
(4)若進(jìn)位變量C為0則進(jìn)入步驟(5),否則進(jìn)入步驟(4.1):
(4.1)設(shè)當(dāng)前節(jié)點(diǎn)為P,新建節(jié)點(diǎn)Q,C mod 100為新建節(jié)點(diǎn)Q的值,修改進(jìn)位變量C=C/100,樹(shù)T的左子樹(shù)反向鏈表根節(jié)點(diǎn)指向Q,Q指向P;正向鏈表P指向Q,Q指向空指針;
(4.2)進(jìn)入步驟(4)繼續(xù)判斷是否需要新增節(jié)點(diǎn)。
8.根據(jù)權(quán)利要求1所述云關(guān)系數(shù)據(jù)庫(kù)的浮點(diǎn)數(shù)據(jù)的加密及查詢方法,其特征在于,步驟e中,所述編碼運(yùn)算規(guī)則具體為:首先對(duì)齊小數(shù)點(diǎn),即找到整數(shù)部分的最后一個(gè)數(shù)字組,然后由最后一個(gè)數(shù)字組向前按組進(jìn)行求和,小數(shù)部分由小數(shù)的第一個(gè)數(shù)字組向后按組進(jìn)行求和,有進(jìn)位時(shí)需處理進(jìn)位。