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