本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)加密方法、解密方法、加密裝置和解密裝置。
背景技術(shù):
在數(shù)據(jù)驅(qū)動(dòng)的科技公司內(nèi),hive(基于hadoop的一個(gè)數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供簡(jiǎn)單的sql查詢功能)被廣泛應(yīng)用于各種與數(shù)據(jù)相關(guān)的業(yè)務(wù)系統(tǒng)中。但是由于一些數(shù)據(jù)存在的敏感特性,如用戶的賬戶名稱、聯(lián)系方式等,在數(shù)據(jù)交互過程中存在較高的風(fēng)險(xiǎn),其泄漏可能對(duì)公司造成巨大的影響和損失。hadoop是一個(gè)分布式系統(tǒng)基礎(chǔ)架構(gòu),sql是結(jié)構(gòu)化查詢語言,英文全稱為structuredquerylanguage。
hive本身并不具備對(duì)數(shù)據(jù)的加密辦法,而且由于hive系統(tǒng)不直接提供加密和權(quán)限控制辦法,對(duì)敏感數(shù)據(jù)的存儲(chǔ)和使用帶來諸多不便?,F(xiàn)有技術(shù)中對(duì)hive中存儲(chǔ)的敏感數(shù)據(jù)的使用,解決辦法通常是:對(duì)所有數(shù)據(jù)的權(quán)限做控制,即指定可使用數(shù)據(jù)的人或部門。
在實(shí)現(xiàn)本發(fā)明過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下問題:現(xiàn)有技術(shù)既引入了流程復(fù)雜的權(quán)限申請(qǐng)審批流程,又不能有效的做到數(shù)據(jù)的安全傳輸,使用過程中可能帶來泄露風(fēng)險(xiǎn)。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例提供一種數(shù)據(jù)加密方法、解密方法、加密裝置和解密裝置。本發(fā)明實(shí)施例同時(shí)提供加密方法和解密方法,在數(shù)據(jù)生成時(shí)調(diào)用加密方法產(chǎn)生密文數(shù)據(jù),提供給業(yè)務(wù)系統(tǒng);業(yè)務(wù)系統(tǒng)獲取密文數(shù)據(jù)后可以進(jìn)行傳遞,在需要使用數(shù)據(jù)時(shí)調(diào)用解密方法獲取原始數(shù)據(jù)。避免了數(shù)據(jù)使用過程中可能帶來的泄露風(fēng)險(xiǎn),保證了數(shù)據(jù)的安全傳輸。
為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的一個(gè)方面,提供了一種數(shù)據(jù)加密方法。
本發(fā)明實(shí)施例的一種數(shù)據(jù)加密方法包括以下步驟:當(dāng)秘鑰不存在時(shí),將原始數(shù)據(jù)的所有字符中每?jī)蓚€(gè)字節(jié)分為一組進(jìn)行異或運(yùn)算;將經(jīng)異或運(yùn)算得到的數(shù)據(jù)按照所述原始數(shù)據(jù)的字符順序進(jìn)行連接以得到中間加密數(shù)據(jù);將所述中間加密數(shù)據(jù)按位與預(yù)設(shè)的第一因子相加,將相加得到的數(shù)據(jù)與預(yù)設(shè)的第二因子進(jìn)行相除以得到相除數(shù)據(jù)和余數(shù),將得到的所有所述相除數(shù)據(jù)和余數(shù)進(jìn)行連接以組成密文數(shù)據(jù);所述第一因子和第二因子為整數(shù),并且
當(dāng)秘鑰存在時(shí),將為原始數(shù)據(jù)設(shè)定的秘鑰按照預(yù)設(shè)移位數(shù)進(jìn)行移位后與所述原始數(shù)據(jù)進(jìn)行異或運(yùn)算;將經(jīng)異或運(yùn)算得到的數(shù)據(jù)按照所述原始數(shù)據(jù)的字符順序進(jìn)行連接以得到中間加密數(shù)據(jù);將所述原始數(shù)據(jù)與所述秘鑰進(jìn)行相加運(yùn)算,將相加得到的數(shù)據(jù)與預(yù)設(shè)的第一因子相乘后再與預(yù)設(shè)的第二因子相加以得到第一新秘鑰;將所述中間加密數(shù)據(jù)按位與所述第一因子相加,將相加得到的數(shù)據(jù)與所述第二因子進(jìn)行相除以得到相除數(shù)據(jù)和余數(shù),將得到的所有相除數(shù)據(jù)和余數(shù)進(jìn)行連接以組成密文數(shù)據(jù);所述第一因子和第二因子為整數(shù)。
可選地,所述原始數(shù)據(jù)為通過hive存儲(chǔ)的數(shù)據(jù)。
可選地,所述方法還包括:將所述數(shù)據(jù)加密方法中的步驟、第一因子、第二因子和移位數(shù)寫入第一自定義函數(shù),將所述第一自定義函數(shù)封裝到j(luò)ar包中以被hive加載。
可選地,所述方法還包括:將封裝到所述jar包的第一自定義函數(shù)注冊(cè)為hive的內(nèi)置函數(shù)。
為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的另一個(gè)方面,提供了一種數(shù)據(jù)解密方法。
本發(fā)明實(shí)施例的一種數(shù)據(jù)解密方法包括以下步驟:當(dāng)秘鑰不存在時(shí),按密文數(shù)據(jù)的字符順序每次提取所述密文數(shù)據(jù)的兩個(gè)字符,將提取得到的第一個(gè)字符與預(yù)設(shè)的第一因子相減后再與預(yù)設(shè)的第二因子相乘,將提取得到的第二個(gè)字符與所述第一因子相減后再與所述第一個(gè)字符相加以得到一個(gè)解密字符;所述第一因子和第二因子與數(shù)據(jù)加密方法的第一因子和第二因子的取值相同;將所有解密字符按照所述密文數(shù)據(jù)的字符順序進(jìn)行組合以得到中間解密數(shù)據(jù);將所述中間解密數(shù)據(jù)的所有字符中每?jī)蓚€(gè)字節(jié)分為一組進(jìn)行異或運(yùn)算,將經(jīng)異或運(yùn)算得到的數(shù)據(jù)與分組中的第二字節(jié)合并后,按所述中間解密數(shù)據(jù)的字符順序進(jìn)行連接以組成解密數(shù)據(jù),并且
當(dāng)秘鑰存在時(shí),按密文數(shù)據(jù)的字符順序每次提取所述密文數(shù)據(jù)的兩個(gè)字符,將提取得到的第一個(gè)字符與預(yù)設(shè)的第一因子相減后再與預(yù)設(shè)的第二因子相乘,將提取得到的第二個(gè)字符與所述第一因子相減后再與所述第一個(gè)字符相加以得到一個(gè)解密字符;所述第一因子和第二因子與數(shù)據(jù)加密方法的第一因子和第二因子的取值相同;將所有解密字符按照所述密文數(shù)據(jù)的字符順序進(jìn)行連接以得到中間解密數(shù)據(jù);將所述中間解密數(shù)據(jù)與所述第一因子相乘后再與第二因子相加以得到第二新秘鑰;將收到的第一新秘鑰按照預(yù)設(shè)移位數(shù)進(jìn)行移位,將移位后的秘鑰與所述中間解密數(shù)據(jù)進(jìn)行異或運(yùn)算,將經(jīng)異或運(yùn)算得到的數(shù)據(jù)按所述中間解密數(shù)據(jù)的字符順序進(jìn)行連接以組成解密數(shù)據(jù);所述移位數(shù)與數(shù)據(jù)加密方法的移位數(shù)的取值相同。
可選地,所述方法還包括:將所述數(shù)據(jù)解密方法中的步驟、第一因子、第二因子和移位數(shù)寫入第二自定義函數(shù),將所述第二自定義函數(shù)封裝到j(luò)ar包中以被hive加載。
可選地,所述方法還包括:將封裝到所述jar包的第二自定義函數(shù)注冊(cè)為hive的內(nèi)置函數(shù)。
為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的另一方面,提供了一種數(shù)據(jù)加密裝置。
本發(fā)明實(shí)例的一種數(shù)據(jù)加密裝置包括:當(dāng)秘鑰不存在時(shí)起作用的分組異或模塊、第一連接模塊和第一相加相除模塊,以及當(dāng)秘鑰存在時(shí)起作用的移位異或模塊、第二連接模塊、新秘鑰生成模塊和第二相加相除模塊,其中,所述分組異或模塊,用于將原始數(shù)據(jù)的所有字符中每?jī)蓚€(gè)字節(jié)分為一組進(jìn)行異或運(yùn)算;所述第一連接模塊,用于將經(jīng)異或運(yùn)算得到的數(shù)據(jù)按照所述原始數(shù)據(jù)的字符順序進(jìn)行連接以得到中間加密數(shù)據(jù);所述第一相加相除模塊,用于將所述中間加密數(shù)據(jù)按位與預(yù)設(shè)的第一因子相加,將相加得到的數(shù)據(jù)與預(yù)設(shè)的第二因子進(jìn)行相除以得到相除數(shù)據(jù)和余數(shù),將得到的所有所述相除數(shù)據(jù)和余數(shù)進(jìn)行連接以組成密文數(shù)據(jù);所述第一因子和第二因子為整數(shù);所述移位異或模塊,用于為原始數(shù)據(jù)的設(shè)定秘鑰,將所述秘鑰按照預(yù)設(shè)移位數(shù)進(jìn)行移位后與所述原始數(shù)據(jù)進(jìn)行異或運(yùn)算;所述第二連接模塊,用于將經(jīng)異或運(yùn)算得到的數(shù)據(jù)按照所述原始數(shù)據(jù)的字符順序進(jìn)行連接以得到中間加密數(shù)據(jù);所述新秘鑰生成模塊,用于將所述原始數(shù)據(jù)與所述秘鑰進(jìn)行相加運(yùn)算,將相加得到的數(shù)據(jù)與預(yù)設(shè)的第一因子相乘后再與預(yù)設(shè)的第二因子相加以得到第一新秘鑰;所述第二相加相除模塊,用于將所述中間加密數(shù)據(jù)按位與所述第一因子相加,將相加得到的數(shù)據(jù)與所述第二因子進(jìn)行相除以得到相除數(shù)據(jù)和余數(shù),將得到的所有相除數(shù)據(jù)和余數(shù)進(jìn)行連接以組成密文數(shù)據(jù);所述第一因子和第二因子為整數(shù)。
可選地,所述原始數(shù)據(jù)為通過hive存儲(chǔ)的數(shù)據(jù)。
可選地,所述裝置還包括:函數(shù)封裝模塊,用于將所述數(shù)據(jù)加密裝置的各模塊、第一因子、第二因子和移位數(shù)寫入第一自定義函數(shù),將所述第一自定義函數(shù)封裝到j(luò)ar包中以被hive加載。
可選地,所述裝置還包括:函數(shù)注冊(cè)模塊,用于將封裝到所述jar包的第一自定義函數(shù)注冊(cè)為hive的內(nèi)置函數(shù)。
為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的另一方面,提供了一種數(shù)據(jù)解密裝置。
本發(fā)明實(shí)例的一種數(shù)據(jù)解密裝置包括:當(dāng)秘鑰不存在時(shí)起作用的第一提取運(yùn)算模塊、第一組合模塊和分組異或模塊,以及當(dāng)秘鑰存在時(shí)起作用的第二提取運(yùn)算模塊、第二組合模塊、新秘鑰生成模塊和移位異或模塊,其中,所述第一提取運(yùn)算模塊,用于按密文數(shù)據(jù)的字符順序每次提取所述密文數(shù)據(jù)的兩個(gè)字符,將提取得到的第一個(gè)字符與預(yù)設(shè)的第一因子相減后再與預(yù)設(shè)的第二因子相乘,將提取得到的第二個(gè)字符與所述第一因子相減后再與所述第一個(gè)字符相加以得到一個(gè)解密字符;所述第一因子和第二因子與數(shù)據(jù)加密裝置的第一因子和第二因子的取值相同;所述第一組合模塊,用于將所有解密字符按照所述密文數(shù)據(jù)的字符順序進(jìn)行組合以得到中間解密數(shù)據(jù);所述分組異或模塊,用于將所述中間解密數(shù)據(jù)的所有字符中每?jī)蓚€(gè)字節(jié)分為一組進(jìn)行異或運(yùn)算,將經(jīng)異或運(yùn)算得到的數(shù)據(jù)與分組中的第二字節(jié)合并后,按所述中間解密數(shù)據(jù)的字符順序進(jìn)行連接以組成解密數(shù)據(jù);所述第二提取運(yùn)算模塊,用于按密文數(shù)據(jù)的字符順序每次提取所述密文數(shù)據(jù)的兩個(gè)字符,將提取得到的第一個(gè)字符與預(yù)設(shè)的第一因子相減后再與預(yù)設(shè)的第二因子相乘,將提取得到的第二個(gè)字符與所述第一因子相減后再與所述第一個(gè)字符相加以得到一個(gè)解密字符;所述第一因子和第二因子與數(shù)據(jù)加密裝置的第一因子和第二因子的取值相同;所述第二組合模塊,用于將所有解密字符按照所述密文數(shù)據(jù)的字符順序進(jìn)行組合以得到中間解密數(shù)據(jù);所述新秘鑰生成模塊,用于將所述中間解密數(shù)據(jù)與所述第一因子相乘后再與第二因子相加以得到第二新秘鑰;所述移位異或模塊,用于將收到的第一新秘鑰按照預(yù)設(shè)移位數(shù)進(jìn)行移位,將移位后的秘鑰與所述中間解密數(shù)據(jù)進(jìn)行異或運(yùn)算,將經(jīng)異或運(yùn)算得到的數(shù)據(jù)按所述中間解密數(shù)據(jù)的字符順序進(jìn)行連接以組成解密數(shù)據(jù);所述移位數(shù)與數(shù)據(jù)加密裝置的移位數(shù)的取值相同。
可選地,所述裝置還包括:函數(shù)封裝模塊,用于將所述數(shù)據(jù)解密裝置的各模塊、第一因子、第二因子和移位數(shù)寫入第二自定義函數(shù),將所述第二自定義函數(shù)封裝到j(luò)ar包中以被hive加載。
可選地,所述裝置還包括:函數(shù)注冊(cè)模塊,用于將封裝到所述jar包的第二自定義函數(shù)注冊(cè)為hive的內(nèi)置函數(shù)。
為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的再一方面,提供了一種電子設(shè)備。
本發(fā)明實(shí)施例的一種電子設(shè)備包括:一個(gè)或多個(gè)處理器;存儲(chǔ)裝置,用于存儲(chǔ)一個(gè)或多個(gè)程序,當(dāng)所述一個(gè)或多個(gè)程序被所述一個(gè)或多個(gè)處理器執(zhí)行,使得所述一個(gè)或多個(gè)處理器實(shí)現(xiàn)本發(fā)明實(shí)施例的一種數(shù)據(jù)加密方法。
為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的再一方面,提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。
本發(fā)明實(shí)施例的一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,所述程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)本發(fā)明實(shí)施例的一種數(shù)據(jù)加密方法。
為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的再一方面,提供了一種電子設(shè)備。
本發(fā)明實(shí)施例的一種電子設(shè)備包括:一個(gè)或多個(gè)處理器;存儲(chǔ)裝置,用于存儲(chǔ)一個(gè)或多個(gè)程序,當(dāng)所述一個(gè)或多個(gè)程序被所述一個(gè)或多個(gè)處理器執(zhí)行,使得所述一個(gè)或多個(gè)處理器實(shí)現(xiàn)本發(fā)明實(shí)施例的一種數(shù)據(jù)解密方法。
為實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的再一方面,提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。
本發(fā)明實(shí)施例的一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,所述程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)本發(fā)明實(shí)施例的一種數(shù)據(jù)解密方法。
上述發(fā)明中的一個(gè)實(shí)施例具有如下優(yōu)點(diǎn)或有益效果:通過預(yù)定義第一因子、第二因子和移位數(shù),對(duì)原始數(shù)據(jù)進(jìn)行異或、相除處理得到密文數(shù)據(jù),異或處理使得數(shù)據(jù)更加分散,避免了數(shù)據(jù)使用過程中可能帶來的泄露風(fēng)險(xiǎn)。將加密方法應(yīng)用于hive系統(tǒng),使得通過hive存儲(chǔ)的數(shù)據(jù)有了較高安全性,有效防止了數(shù)據(jù)泄露。本發(fā)明同時(shí)提供了數(shù)據(jù)解密方法,使得加密后的數(shù)據(jù)經(jīng)解密后可以獲取原始數(shù)據(jù),是一種可逆加密方式。通過將加密方法、解密方法封裝為自定義函數(shù),使得加密方法、解密方法能夠被hive加載,還可以注冊(cè)為hive的內(nèi)置函數(shù)直接被hive調(diào)用。
上述的非慣用的可選方式所具有的進(jìn)一步效果將在下文中結(jié)合具體實(shí)施方式加以說明。
附圖說明
附圖用于更好地理解本發(fā)明,不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。其中:
圖1是根據(jù)本發(fā)明實(shí)施例的秘鑰不存在時(shí)的數(shù)據(jù)加密方法的主要步驟的示意圖;
圖2是根據(jù)本發(fā)明實(shí)施例秘鑰存在時(shí)的數(shù)據(jù)加密方法的主要步驟的示意圖;
圖3是根據(jù)本發(fā)明實(shí)施例秘鑰不存在時(shí)的數(shù)據(jù)解密方法的主要步驟的示意圖;
圖4是根據(jù)本發(fā)明實(shí)施例秘鑰存在時(shí)的數(shù)據(jù)解密方法的主要步驟的示意圖;
圖5是本發(fā)明實(shí)施例的數(shù)據(jù)加密方法、數(shù)據(jù)解密方法的使用過程示意圖;
圖6是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)加密裝置的主要模塊的示意圖;
圖7是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)解密裝置的主要模塊的示意圖;
圖8是本發(fā)明實(shí)施例可以應(yīng)用于其中的示例性系統(tǒng)架構(gòu)圖;
圖9是適用于來實(shí)現(xiàn)本發(fā)明實(shí)施例的電子設(shè)備的計(jì)算機(jī)系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
以下結(jié)合附圖對(duì)本發(fā)明的示范性實(shí)施例做出說明,其中包括本發(fā)明實(shí)施例的各種細(xì)節(jié)以助于理解,應(yīng)當(dāng)將它們認(rèn)為僅僅是示范性的。因此,本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)認(rèn)識(shí)到,可以對(duì)這里描述的實(shí)施例做出各種改變和修改,而不會(huì)背離本發(fā)明的范圍和精神。同樣,為了清楚和簡(jiǎn)明,以下的描述中省略了對(duì)公知功能和結(jié)構(gòu)的描述。
本發(fā)明實(shí)施例的數(shù)據(jù)加密方法允許設(shè)定秘鑰,但秘鑰是可選的,在海量數(shù)據(jù)的情況下,如果每個(gè)數(shù)據(jù)產(chǎn)生無關(guān)聯(lián)秘鑰,會(huì)占用大量的存儲(chǔ)空間和較多的帶寬資源,這時(shí)不適宜使用秘鑰。當(dāng)秘鑰存在時(shí),加密方法中存在3個(gè)自定義變量:移位數(shù)n、第一因子a和第二因子b。當(dāng)秘鑰存在時(shí),加密方法中存在2個(gè)自定義變量:第一因子a和第二因子b。數(shù)據(jù)解密方法中,秘鑰也是可選的,且數(shù)據(jù)解密方法使用與加密方法相同的移位數(shù)n、第一因子a和第二因子b。
圖1是根據(jù)本發(fā)明實(shí)施例的秘鑰不存在時(shí)的數(shù)據(jù)加密方法的主要步驟的示意圖。
如圖1所示,本發(fā)明實(shí)施例的秘鑰不存在時(shí)的數(shù)據(jù)加密方法主要包括如下步驟:當(dāng)秘鑰不存在時(shí),
步驟s101:將原始數(shù)據(jù)的所有字符中每?jī)蓚€(gè)字節(jié)分為一組進(jìn)行異或運(yùn)算。
步驟s102:將經(jīng)異或運(yùn)算得到的數(shù)據(jù)按照所述原始數(shù)據(jù)的字符順序進(jìn)行連接以得到中間加密數(shù)據(jù)。按字節(jié)操作完成后對(duì)中間加密數(shù)據(jù)進(jìn)行位置轉(zhuǎn)換,具體實(shí)現(xiàn)見步驟103。
步驟s103:將所述中間加密數(shù)據(jù)按位與預(yù)設(shè)的第一因子a相加,將相加得到的數(shù)據(jù)與預(yù)設(shè)的第二因子b進(jìn)行相除以得到相除數(shù)據(jù)和余數(shù),將得到的所有所述相除數(shù)據(jù)和余數(shù)進(jìn)行連接以組成密文數(shù)據(jù),輸出密文數(shù)據(jù)。該步驟按位操作字符,第一因子a和第二因子b為自定義,ascii碼的總長(zhǎng)度最大是65536,因此第一因子a不能超過65536,一般為64-256之間的任意整數(shù);第二因子b一般為第一因子a的1/3至1/10之間的整數(shù),該值是經(jīng)驗(yàn)值,其取值太大會(huì)導(dǎo)致相除、取余操作后得到的結(jié)果更接近原始數(shù)據(jù)本身。
圖2是根據(jù)本發(fā)明實(shí)施例的秘鑰存在時(shí)的數(shù)據(jù)加密方法的主要步驟的示意圖。
如圖2所示,本發(fā)明實(shí)施例的秘鑰不存在時(shí)的數(shù)據(jù)加密方法主要包括如下步驟:當(dāng)秘鑰存在時(shí),
步驟s201:將為原始數(shù)據(jù)設(shè)定的秘鑰按照預(yù)設(shè)移位數(shù)進(jìn)行移位后與所述原始數(shù)據(jù)進(jìn)行異或運(yùn)算。實(shí)施例中將秘鑰右移n位。
步驟s202:將經(jīng)異或運(yùn)算得到的數(shù)據(jù)按照所述原始數(shù)據(jù)的字符順序進(jìn)行連接以得到中間加密數(shù)據(jù)。
步驟s203:將所述原始數(shù)據(jù)與所述秘鑰進(jìn)行相加運(yùn)算,將相加得到的數(shù)據(jù)與預(yù)設(shè)的第一因子a相乘后再與預(yù)設(shè)的第二因子b相加以得到第一新秘鑰。第一因子a和第二因子b為自定義,ascii碼的總長(zhǎng)度最大是65536,因此第一因子a不能超過65536,一般為64-256之間的任意整數(shù);第二因子b一般為第一因子a的1/3至1/10之間的整數(shù),該值是經(jīng)驗(yàn)值,其取值太大會(huì)導(dǎo)致相除、取余操作后得到的結(jié)果更接近原始數(shù)據(jù)本身。
步驟s204:將所述中間加密數(shù)據(jù)按位與所述第一因子a相加,將相加得到的數(shù)據(jù)與所述第二因子b進(jìn)行相除以得到相除數(shù)據(jù)和余數(shù),將得到的所有相除數(shù)據(jù)和余數(shù)進(jìn)行連接以組成密文數(shù)據(jù),將得到的密文數(shù)據(jù)和第一新秘鑰輸出。第一新秘鑰用于解密。
其中,步驟201-步驟203是按字符對(duì)數(shù)據(jù)進(jìn)行操作,數(shù)據(jù)可以是多行,對(duì)每一行的數(shù)據(jù)按字符進(jìn)行操作,比如數(shù)據(jù)為字母時(shí),以一個(gè)字母為單位進(jìn)行運(yùn)算;為漢字時(shí),以一個(gè)漢字為單位進(jìn)行運(yùn)算。步驟204是按位操作,每一行數(shù)據(jù)對(duì)應(yīng)有一個(gè)相除數(shù)據(jù)和余數(shù),將所有行的數(shù)據(jù)的相除數(shù)據(jù)和余數(shù)按原始順序連接組成密文數(shù)據(jù)。
另外,原始數(shù)據(jù)可以是通過hive存儲(chǔ)的數(shù)據(jù),這些數(shù)據(jù)通過加密方法產(chǎn)生密文數(shù)據(jù),并提供給業(yè)務(wù)系統(tǒng);業(yè)務(wù)系統(tǒng)獲取密文數(shù)據(jù)后可以進(jìn)行傳遞,有數(shù)據(jù)使用需求時(shí)。調(diào)用解密方法對(duì)密文數(shù)據(jù)進(jìn)行解密,保證了hive中數(shù)據(jù)的安全傳輸,規(guī)避了敏感數(shù)據(jù)的使用過程中可能帶來的泄漏風(fēng)險(xiǎn)。
圖3是根據(jù)本發(fā)明實(shí)施例的秘鑰不存在時(shí)的數(shù)據(jù)解密方法的主要步驟的示意圖。
如圖3所示,本發(fā)明實(shí)施例的秘鑰不存在時(shí)的數(shù)據(jù)解密方法主要包括如下步驟:當(dāng)秘鑰不存在時(shí),
步驟301:按密文數(shù)據(jù)的字符順序每次提取所述密文數(shù)據(jù)的兩個(gè)字符,將提取得到的第一個(gè)字符與預(yù)設(shè)的第一因子a相減后再與預(yù)設(shè)的第二因子b相乘,將提取得到的第二個(gè)字符與所述第一因子a相減后再與所述第一個(gè)字符相加以得到一個(gè)解密字符。所述第一因子a和第二因子b與數(shù)據(jù)加密方法的第一因子a和第二因子b的取值相同。
步驟302:將所有解密字符按照所述密文數(shù)據(jù)的字符順序進(jìn)行組合以得到中間解密數(shù)據(jù)。
步驟303:將所述中間解密數(shù)據(jù)的所有字符中每?jī)蓚€(gè)字節(jié)分為一組進(jìn)行異或運(yùn)算,將經(jīng)異或運(yùn)算得到的數(shù)據(jù)與分組中的第二字節(jié)合并后,按所述中間解密數(shù)據(jù)的字符順序進(jìn)行連接以組成解密數(shù)據(jù),輸出解密數(shù)據(jù)。
圖4是根據(jù)本發(fā)明實(shí)施例的秘鑰存在時(shí)的數(shù)據(jù)解密方法的主要步驟的示意圖。
如圖4所示,本發(fā)明實(shí)施例的秘鑰存在時(shí)的數(shù)據(jù)解密方法主要包括如下步驟:當(dāng)秘鑰存在時(shí),
步驟401:按密文數(shù)據(jù)的字符順序每次提取所述密文數(shù)據(jù)的兩個(gè)字符,將提取得到的第一個(gè)字符與預(yù)設(shè)的第一因子a相減后再與預(yù)設(shè)的第二因子b相乘,將提取得到的第二個(gè)字符與所述第一因子a相減后再與所述第一個(gè)字符相加以得到一個(gè)解密字符。所述第一因子a和第二因子b與數(shù)據(jù)加密方法的第一因子a和第二因子b的取值相同。加密方法中步驟204兩個(gè)新生成字符為與第二因子b的相除結(jié)果和余數(shù),那么在組成密文數(shù)據(jù)的時(shí)候,相除結(jié)果和余數(shù)的先后順序沒有限定。如果相除結(jié)果在前、余數(shù)在后,那么解密方法中相除結(jié)果與提取的第一位字符相對(duì)應(yīng),余數(shù)與提取的第二位字符相對(duì)應(yīng);如果反過來,那么解密中的處理也要反過來。
步驟402:將所有解密字符按照所述密文數(shù)據(jù)的字符順序進(jìn)行連接以得到中間解密數(shù)據(jù)。
步驟403:將所述中間解密數(shù)據(jù)與所述第一因子a相乘后再與第二因子b相加以得到第二新秘鑰。第二新秘鑰用來給下一行數(shù)據(jù)解密。
步驟404:將收到的第一新秘鑰按照預(yù)設(shè)移位數(shù)進(jìn)行移位,將移位后的秘鑰與所述中間解密數(shù)據(jù)進(jìn)行異或運(yùn)算,將經(jīng)異或運(yùn)算得到的數(shù)據(jù)按所述中間解密數(shù)據(jù)的字符順序進(jìn)行連接以組成解密數(shù)據(jù),輸出解密數(shù)據(jù)和第二新秘鑰。實(shí)施例中將第一新秘鑰右移n位,這里的n與加密方法中的移位數(shù)n相同。
另外,hive允許用戶使用自定義函數(shù)對(duì)數(shù)據(jù)進(jìn)行處理,用戶可以集成hive提供的自定義函數(shù),因此本發(fā)明實(shí)施例中將加密方法、解密方法進(jìn)行了函數(shù)封裝,具體過程為:將加密方法中的所有步驟、三個(gè)自定義變量寫入自定義函數(shù)1,將解密方法中的所有步驟、三個(gè)自定義變量寫入自定義函數(shù)2,將兩個(gè)自定義函數(shù)生成獨(dú)立的jar包。封裝后的自定義函數(shù)可以動(dòng)態(tài)的被hive加載,加載后由hive引用并創(chuàng)建可用于被sql直接調(diào)用的函數(shù)名。jar包是將用java語言寫好的代碼編譯后打包的文件,可直接執(zhí)行jar內(nèi)部的java程序。
另外,封裝后的自定義函數(shù)可以注冊(cè)為hive的內(nèi)置函數(shù)。將自定義函數(shù)1、2加入到hive的源碼中重新打包編譯后,可以直接被hive調(diào)用。源碼是指被編譯后可被直接調(diào)用執(zhí)行的代碼。
圖5是本發(fā)明實(shí)施例的數(shù)據(jù)加密方法、數(shù)據(jù)解密方法的使用過程示意圖。
如圖5所示,描述了三種不同的使用方式。第一種使用方式為:加密后的密文數(shù)據(jù)經(jīng)解密后傳遞給業(yè)務(wù)應(yīng)用系統(tǒng)1。第二、三種使用方式為:加密后的密文數(shù)據(jù)傳遞給業(yè)務(wù)應(yīng)用系統(tǒng)2,由業(yè)務(wù)系統(tǒng)2解密后通過業(yè)務(wù)系統(tǒng)3使用數(shù)據(jù)。如:用戶手機(jī)號(hào)信息使用加密方法加密后,傳遞給廣告推薦系統(tǒng);廣告推薦系統(tǒng)先調(diào)用解密方法對(duì)數(shù)據(jù)解密,再調(diào)取短信發(fā)送系統(tǒng)發(fā)送廣告推送。
根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)加密方法、解密方法可以看出,通過預(yù)定義第一因子、第二因子和移位數(shù),對(duì)原始數(shù)據(jù)進(jìn)行異或、相除處理得到密文數(shù)據(jù),異或處理使得數(shù)據(jù)更加分散,避免了數(shù)據(jù)使用過程中可能帶來的泄露風(fēng)險(xiǎn)。將加密方法應(yīng)用于hive系統(tǒng),使得通過hive存儲(chǔ)的數(shù)據(jù)有了較高安全性,有效防止了數(shù)據(jù)泄露。本發(fā)明同時(shí)提供了數(shù)據(jù)解密方法,使得加密后的數(shù)據(jù)經(jīng)解密后可以獲取原始數(shù)據(jù),是一種可逆加密方式。通過將加密方法、解密方法封裝為自定義函數(shù),使得加密方法、解密方法能夠被hive加載,還可以注冊(cè)為hive的內(nèi)置函數(shù)直接被hive調(diào)用。
圖6是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)加密裝置的主要模塊的示意圖。
如圖6所示,本發(fā)明實(shí)施例的數(shù)據(jù)加密裝置600包括:當(dāng)秘鑰不存在時(shí)起作用的分組異或模塊601、第一連接模塊602和第一相加相除模塊603,以及當(dāng)秘鑰存在時(shí)起作用的移位異或模塊604、第二連接模塊605、新秘鑰生成模塊606和第二相加相除模塊607。其中,
所述分組異或模塊601,用于將原始數(shù)據(jù)的所有字符中每?jī)蓚€(gè)字節(jié)分為一組進(jìn)行異或運(yùn)算。
所述第一連接模塊602,用于將經(jīng)異或運(yùn)算得到的數(shù)據(jù)按照所述原始數(shù)據(jù)的字符順序進(jìn)行連接以得到中間加密數(shù)據(jù)。
所述第一相加相除模塊603,用于將所述中間加密數(shù)據(jù)按位與預(yù)設(shè)的第一因子a相加,將相加得到的數(shù)據(jù)與預(yù)設(shè)的第二因子b進(jìn)行相除以得到相除數(shù)據(jù)和余數(shù),將得到的所有所述相除數(shù)據(jù)和余數(shù)進(jìn)行連接以組成密文數(shù)據(jù);所述第一因子a和第二因子b為整數(shù)。
所述移位異或模塊604,用于為原始數(shù)據(jù)的設(shè)定秘鑰,將所述秘鑰按照預(yù)設(shè)移位數(shù)n進(jìn)行移位后與所述原始數(shù)據(jù)進(jìn)行異或運(yùn)算。
所述第二連接模塊605,用于將經(jīng)異或運(yùn)算得到的數(shù)據(jù)按照所述原始數(shù)據(jù)的字符順序進(jìn)行連接以得到中間加密數(shù)據(jù)。
所述新秘鑰生成模塊606,用于將所述原始數(shù)據(jù)與所述秘鑰進(jìn)行相加運(yùn)算,將相加得到的數(shù)據(jù)與預(yù)設(shè)的第一因子a相乘后再與預(yù)設(shè)的第二因子b相加以得到第一新秘鑰。
所述第二相加相除模塊607,用于將所述中間加密數(shù)據(jù)按位與所述第一因子a相加,將相加得到的數(shù)據(jù)與所述第二因子b進(jìn)行相除以得到相除數(shù)據(jù)和余數(shù),將得到的所有相除數(shù)據(jù)和余數(shù)進(jìn)行連接以組成密文數(shù)據(jù);所述第一因子a和第二因子b為整數(shù)。
其中,所述原始數(shù)據(jù)為通過hive存儲(chǔ)的數(shù)據(jù)。
另外,所述裝置還包括:函數(shù)封裝模塊(圖中未示出),用于將所述數(shù)據(jù)加密裝置的各模塊、第一因子a、第二因子b和移位數(shù)n寫入第一自定義函數(shù),將所述第一自定義函數(shù)封裝到j(luò)ar包中以被hive加載。
另外,所述裝置還包括:函數(shù)注冊(cè)模塊(圖中未示出),用于將封裝到所述jar包的第一自定義函數(shù)注冊(cè)為hive的內(nèi)置函數(shù)。
圖7是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)解密裝置的主要模塊的示意圖。
如圖7所示,本發(fā)明實(shí)施例的數(shù)據(jù)解密裝置700包括:當(dāng)秘鑰不存在時(shí)起作用的第一提取運(yùn)算模塊701、第一組合模塊702和分組異或模塊703,以及當(dāng)秘鑰存在時(shí)起作用的第二提取運(yùn)算模塊704、第二組合模塊705、新秘鑰生成模塊706和移位異或模塊707。其中,
所述第一提取運(yùn)算模塊701,用于按密文數(shù)據(jù)的字符順序每次提取所述密文數(shù)據(jù)的兩個(gè)字符,將提取得到的第一個(gè)字符與預(yù)設(shè)的第一因子a相減后再與預(yù)設(shè)的第二因子b相乘,將提取得到的第二個(gè)字符與所述第一因子a相減后再與所述第一個(gè)字符相加以得到一個(gè)解密字符;所述第一因子a和第二因子b與數(shù)據(jù)加密裝置的第一因子a和第二因子b的取值相同。
所述第一組合模塊702,用于將所有解密字符按照所述密文數(shù)據(jù)的字符順序進(jìn)行組合以得到中間解密數(shù)據(jù)。
所述分組異或模塊703,用于將所述中間解密數(shù)據(jù)的所有字符中每?jī)蓚€(gè)字節(jié)分為一組進(jìn)行異或運(yùn)算,將經(jīng)異或運(yùn)算得到的數(shù)據(jù)與分組中的第二字節(jié)合并后,按所述中間解密數(shù)據(jù)的字符順序進(jìn)行連接以組成解密數(shù)據(jù)。
所述第二提取運(yùn)算模塊704,用于按密文數(shù)據(jù)的字符順序每次提取所述密文數(shù)據(jù)的兩個(gè)字符,將提取得到的第一個(gè)字符與預(yù)設(shè)的第一因子a相減后再與預(yù)設(shè)的第二因子b相乘,將提取得到的第二個(gè)字符與所述第一因子a相減后再與所述第一個(gè)字符相加以得到一個(gè)解密字符;所述第一因子a和第二因子b與數(shù)據(jù)加密裝置的第一因子a和第二因b子的取值相同。
所述第二組合模塊705,用于將所有解密字符按照所述密文數(shù)據(jù)的字符順序進(jìn)行組合以得到中間解密數(shù)據(jù)。
所述新秘鑰生成模塊706,用于將所述中間解密數(shù)據(jù)與所述第一因子a相乘后再與第二因子b相加以得到第二新秘鑰。
所述移位異或模塊707,用于將收到的第一新秘鑰按照預(yù)設(shè)移位數(shù)進(jìn)行移位,將移位后的秘鑰與所述中間解密數(shù)據(jù)進(jìn)行異或運(yùn)算,將經(jīng)異或運(yùn)算得到的數(shù)據(jù)按所述中間解密數(shù)據(jù)的字符順序進(jìn)行連接以組成解密數(shù)據(jù);所述移位數(shù)與數(shù)據(jù)加密裝置的移位數(shù)n的取值相同。
另外,所述裝置還包括:函數(shù)封裝模塊(圖中未示出),用于將所述數(shù)據(jù)解密裝置的各模塊、第一因子a、第二因子b和移位數(shù)n寫入第二自定義函數(shù),將所述第二自定義函數(shù)封裝到j(luò)ar包中以被hive加載。
另外,所述裝置還包括:函數(shù)注冊(cè)模塊(圖中未示出),用于將封裝到所述jar包的第二自定義函數(shù)注冊(cè)為hive的內(nèi)置函數(shù)。
從以上描述可以看出,通過預(yù)定義第一因子、第二因子和移位數(shù),對(duì)原始數(shù)據(jù)進(jìn)行異或、相除處理得到密文數(shù)據(jù),異或處理使得數(shù)據(jù)更加分散,避免了數(shù)據(jù)使用過程中可能帶來的泄露風(fēng)險(xiǎn)。將加密方法應(yīng)用于hive系統(tǒng),使得通過hive存儲(chǔ)的數(shù)據(jù)有了較高安全性,有效防止了數(shù)據(jù)泄露。本發(fā)明同時(shí)提供了數(shù)據(jù)解密方法,使得加密后的數(shù)據(jù)經(jīng)解密后可以獲取原始數(shù)據(jù),是一種可逆加密方式。通過將加密方法、解密方法封裝為自定義函數(shù),使得加密方法、解密方法能夠被hive加載,還可以注冊(cè)為hive的內(nèi)置函數(shù)直接被hive調(diào)用。
圖8示出了可以應(yīng)用本發(fā)明實(shí)施例的數(shù)據(jù)加密方法、數(shù)據(jù)解密方法、數(shù)據(jù)加密裝置或是解密裝置的示例性系統(tǒng)架構(gòu)800。
如圖8所示,系統(tǒng)架構(gòu)800可以包括終端設(shè)備801、802、803,網(wǎng)絡(luò)804和服務(wù)器805。網(wǎng)絡(luò)804用以在終端設(shè)備801、802、803和服務(wù)器805之間提供通信鏈路的介質(zhì)。網(wǎng)絡(luò)804可以包括各種連接類型,例如有線、無線通信鏈路或者光纖電纜等等。
用戶可以使用終端設(shè)備801、802、803通過網(wǎng)絡(luò)804與服務(wù)器805交互,以接收或發(fā)送消息等。終端設(shè)備801、802、803上可以安裝有各種通訊客戶端應(yīng)用,例如購物類應(yīng)用、網(wǎng)頁瀏覽器應(yīng)用、搜索類應(yīng)用、即時(shí)通信工具、郵箱客戶端、社交平臺(tái)軟件等(僅為示例)。
終端設(shè)備801、802、803可以是具有顯示屏并且支持網(wǎng)頁瀏覽的各種電子設(shè)備,包括但不限于智能手機(jī)、平板電腦、膝上型便攜計(jì)算機(jī)和臺(tái)式計(jì)算機(jī)等等。
服務(wù)器805可以是提供各種服務(wù)的服務(wù)器,例如對(duì)用戶利用終端設(shè)備801、802、803所產(chǎn)生的點(diǎn)擊事件提供支持的后臺(tái)管理服務(wù)器(僅為示例)。后臺(tái)管理服務(wù)器可以對(duì)接收到的點(diǎn)擊數(shù)據(jù)、文本內(nèi)容等數(shù)據(jù)進(jìn)行分析等處理,并將處理結(jié)果(例如目標(biāo)推送信息、產(chǎn)品信息--僅為示例)反饋給終端設(shè)備。
需要說明的是,本申請(qǐng)實(shí)施例所提供的數(shù)據(jù)加密方法或者數(shù)據(jù)解密方法一般由服務(wù)器805執(zhí)行,相應(yīng)地,數(shù)據(jù)加密裝置或者數(shù)據(jù)解密裝置一般設(shè)置于服務(wù)器805中。
應(yīng)該理解,圖8中的終端設(shè)備、網(wǎng)絡(luò)和服務(wù)器的數(shù)目?jī)H僅是示意性的。根據(jù)實(shí)現(xiàn)需要,可以具有任意數(shù)目的終端設(shè)備、網(wǎng)絡(luò)和服務(wù)器。
根據(jù)本發(fā)明的實(shí)施例,本發(fā)明還提供了一種電子設(shè)備和一種計(jì)算機(jī)可讀介質(zhì)。
本發(fā)明的電子設(shè)備包括:一個(gè)或多個(gè)處理器;存儲(chǔ)裝置,用于存儲(chǔ)一個(gè)或多個(gè)程序,當(dāng)所述一個(gè)或多個(gè)程序被所述一個(gè)或多個(gè)處理器執(zhí)行,使得所述一個(gè)或多個(gè)處理器實(shí)現(xiàn)本發(fā)明實(shí)施例的一種數(shù)據(jù)加密方法。
本發(fā)明的計(jì)算機(jī)可讀介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,所述程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)本發(fā)明實(shí)施例的一種數(shù)據(jù)加密方法。
根據(jù)本發(fā)明的實(shí)施例,本發(fā)明還提供了一種電子設(shè)備和一種計(jì)算機(jī)可讀介質(zhì)。
本發(fā)明的電子設(shè)備包括:一個(gè)或多個(gè)處理器;存儲(chǔ)裝置,用于存儲(chǔ)一個(gè)或多個(gè)程序,當(dāng)所述一個(gè)或多個(gè)程序被所述一個(gè)或多個(gè)處理器執(zhí)行,使得所述一個(gè)或多個(gè)處理器實(shí)現(xiàn)本發(fā)明實(shí)施例的一種數(shù)據(jù)解密方法。
本發(fā)明的計(jì)算機(jī)可讀介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,所述程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)本發(fā)明實(shí)施例的一種數(shù)據(jù)解密方法。
下面參考圖9,其示出了適于用來實(shí)現(xiàn)本發(fā)明實(shí)施例的終端設(shè)備的計(jì)算機(jī)系統(tǒng)900的結(jié)構(gòu)示意圖。圖9示出的終端設(shè)備僅僅是一個(gè)示例,不應(yīng)對(duì)本發(fā)明實(shí)施例的功能和使用范圍帶來任何限制。
如圖9所示,計(jì)算機(jī)系統(tǒng)900包括中央處理單元(cpu)901,其可以根據(jù)存儲(chǔ)在只讀存儲(chǔ)器(rom)902中的程序或者從存儲(chǔ)部分908加載到隨機(jī)訪問存儲(chǔ)器(ram)903中的程序而執(zhí)行各種適當(dāng)?shù)膭?dòng)作和處理。在ram903中,還存儲(chǔ)有系統(tǒng)900操作所需的各種程序和數(shù)據(jù)。cpu901、rom902以及ram903通過總線904彼此相連。輸入/輸出(i/o)接口905也連接至總線904。
以下部件連接至i/o接口905:包括鍵盤、鼠標(biāo)等的輸入部分906;包括諸如陰極射線管(crt)、液晶顯示器(lcd)等以及揚(yáng)聲器等的輸出部分907;包括硬盤等的存儲(chǔ)部分908;以及包括諸如lan卡、調(diào)制解調(diào)器等的網(wǎng)絡(luò)接口卡的通信部分909。通信部分909經(jīng)由諸如因特網(wǎng)的網(wǎng)絡(luò)執(zhí)行通信處理。驅(qū)動(dòng)器910也根據(jù)需要連接至i/o接口905??刹鹦督橘|(zhì)911,諸如磁盤、光盤、磁光盤、半導(dǎo)體存儲(chǔ)器等等,根據(jù)需要安裝在驅(qū)動(dòng)器910上,以便于從其上讀出的計(jì)算機(jī)程序根據(jù)需要被安裝入存儲(chǔ)部分908。
特別地,根據(jù)本發(fā)明公開的實(shí)施例,上文主要步驟圖描述的過程可以被實(shí)現(xiàn)為計(jì)算機(jī)軟件程序。例如,本發(fā)明公開的實(shí)施例包括一種計(jì)算機(jī)程序產(chǎn)品,其包括承載在計(jì)算機(jī)可讀介質(zhì)上的計(jì)算機(jī)程序,該計(jì)算機(jī)程序包含用于執(zhí)行流程圖所示的方法的程序代碼。在這樣的實(shí)施例中,該計(jì)算機(jī)程序可以通過通信部分909從網(wǎng)絡(luò)上被下載和安裝,和/或從可拆卸介質(zhì)911被安裝。在該計(jì)算機(jī)程序被中央處理單元(cpu)901執(zhí)行時(shí),執(zhí)行本發(fā)明的系統(tǒng)中限定的上述功能。
需要說明的是,本發(fā)明所示的計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀信號(hào)介質(zhì)或者計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)或者是上述兩者的任意組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以是——但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的例子可以包括但不限于:具有一個(gè)或多個(gè)導(dǎo)線的電連接、便攜式計(jì)算機(jī)磁盤、硬盤、隨機(jī)訪問存儲(chǔ)器(ram)、只讀存儲(chǔ)器(rom)、可擦式可編程只讀存儲(chǔ)器(eprom或閃存)、光纖、便攜式緊湊磁盤只讀存儲(chǔ)器(cd-rom)、光存儲(chǔ)器件、磁存儲(chǔ)器件、或者上述的任意合適的組合。在本發(fā)明中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是任何包含或存儲(chǔ)程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。而在本發(fā)明中,計(jì)算機(jī)可讀的信號(hào)介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號(hào),其中承載了計(jì)算機(jī)可讀的程序代碼。這種傳播的數(shù)據(jù)信號(hào)可以采用多種形式,包括但不限于電磁信號(hào)、光信號(hào)或上述的任意合適的組合。計(jì)算機(jī)可讀的信號(hào)介質(zhì)還可以是計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)以外的任何計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。計(jì)算機(jī)可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括但不限于:無線、電線、光纜、rf等等,或者上述的任意合適的組合。
附圖中的主要步驟圖和框圖,圖示了按照本發(fā)明各種實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段、或代碼的一部分,上述模塊、程序段、或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)接連地表示的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖或流程圖中的每個(gè)方框、以及框圖或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。
描述于本發(fā)明實(shí)施例中所涉及到的模塊可以通過軟件的方式實(shí)現(xiàn),也可以通過硬件的方式來實(shí)現(xiàn)。所描述的模塊也可以設(shè)置在處理器中,例如,可以描述為:一種處理器包括分組異或模塊、第一連接模塊、第一相加相除模塊、移位異或模塊、第二連接模塊、新秘鑰生成模塊和第二相加相除模塊。其中,這些模塊的名稱在某種情況下并不構(gòu)成對(duì)該單元本身的限定,例如,分組異或模塊還可以被描述為“將原始數(shù)據(jù)的所有字符中每?jī)蓚€(gè)字節(jié)分為一組進(jìn)行異或運(yùn)算的模塊”。
作為另一方面,本發(fā)明還提供了一種計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)可讀介質(zhì)可以是上述實(shí)施例中描述的設(shè)備中所包含的;也可以是單獨(dú)存在,而未裝配入該設(shè)備中。上述計(jì)算機(jī)可讀介質(zhì)承載有一個(gè)或者多個(gè)程序,當(dāng)上述一個(gè)或者多個(gè)程序被一個(gè)該設(shè)備執(zhí)行時(shí),使得該設(shè)備包括:當(dāng)秘鑰不存在時(shí),將原始數(shù)據(jù)的所有字符中每?jī)蓚€(gè)字節(jié)分為一組進(jìn)行異或運(yùn)算;將經(jīng)異或運(yùn)算得到的數(shù)據(jù)按照所述原始數(shù)據(jù)的字符順序進(jìn)行連接以得到中間加密數(shù)據(jù);將所述中間加密數(shù)據(jù)按位與預(yù)設(shè)的第一因子相加,將相加得到的數(shù)據(jù)與預(yù)設(shè)的第二因子進(jìn)行相除以得到相除數(shù)據(jù)和余數(shù),將得到的所有所述相除數(shù)據(jù)和余數(shù)進(jìn)行連接以組成密文數(shù)據(jù);所述第一因子和第二因子為整數(shù),并且
當(dāng)秘鑰存在時(shí),將為原始數(shù)據(jù)設(shè)定的秘鑰按照預(yù)設(shè)移位數(shù)進(jìn)行移位后與所述原始數(shù)據(jù)進(jìn)行異或運(yùn)算;將經(jīng)異或運(yùn)算得到的數(shù)據(jù)按照所述原始數(shù)據(jù)的字符順序進(jìn)行連接以得到中間加密數(shù)據(jù);將所述原始數(shù)據(jù)與所述秘鑰進(jìn)行相加運(yùn)算,將相加得到的數(shù)據(jù)與預(yù)設(shè)的第一因子相乘后再與預(yù)設(shè)的第二因子相加以得到第一新秘鑰;將所述中間加密數(shù)據(jù)按位與所述第一因子相加,將相加得到的數(shù)據(jù)與所述第二因子進(jìn)行相除以得到相除數(shù)據(jù)和余數(shù),將得到的所有相除數(shù)據(jù)和余數(shù)進(jìn)行連接以組成密文數(shù)據(jù);所述第一因子和第二因子為整數(shù)。
根據(jù)本發(fā)明實(shí)施例的技術(shù)方案,通過預(yù)定義第一因子、第二因子和移位數(shù),對(duì)原始數(shù)據(jù)進(jìn)行異或、相除處理得到密文數(shù)據(jù),異或處理使得數(shù)據(jù)更加分散,避免了數(shù)據(jù)使用過程中可能帶來的泄露風(fēng)險(xiǎn)。將加密方法應(yīng)用于hive系統(tǒng),使得通過hive存儲(chǔ)的數(shù)據(jù)有了較高安全性,有效防止了數(shù)據(jù)泄露。本發(fā)明同時(shí)提供了數(shù)據(jù)解密方法,使得加密后的數(shù)據(jù)經(jīng)解密后可以獲取原始數(shù)據(jù),是一種可逆加密方式。通過將加密方法、解密方法封裝為自定義函數(shù),使得加密方法、解密方法能夠被hive加載,還可以注冊(cè)為hive的內(nèi)置函數(shù)直接被hive調(diào)用。
上述具體實(shí)施方式,并不構(gòu)成對(duì)本發(fā)明保護(hù)范圍的限制。本領(lǐng)域技術(shù)人員應(yīng)該明白的是,取決于設(shè)計(jì)要求和其他因素,可以發(fā)生各種各樣的修改、組合、子組合和替代。任何在本發(fā)明的精神和原則之內(nèi)所作的修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)范圍之內(nèi)。