本發(fā)明涉及移動終端技術(shù)領(lǐng)域,特別涉及一種基于rc4算法的代碼全包加密方法。
背景技術(shù):
自html5技術(shù)誕生以來,對于html、javascript、css代碼的加密保護,至今依然是一個巨大的難題。基于html5跨平臺技術(shù)開發(fā)的移動app,通過解壓其安裝包,即可使用任意代碼編輯器直接查看源代碼,由此帶來產(chǎn)品創(chuàng)意被復(fù)制,核心代碼被竊取,私密數(shù)據(jù)泄露,知識產(chǎn)權(quán)被侵犯等一系列的問題,嚴(yán)重者甚至波及服務(wù)器的安全。
國內(nèi)外知名的跨平臺app開發(fā)技術(shù)提供商,如phonegap、appcelerator等,在對html、javascript、css代碼的加密保護上,均無良好的對策,通常使用混淆來增加代碼的閱讀難度,實現(xiàn)對代碼的簡單保護,但代碼依然為可讀的明文,未真正解決html、javascript、css代碼的加密保護問題。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的旨在至少解決所述技術(shù)缺陷之一。
為此,本發(fā)明的目的在于提出一種基于rc4算法的代碼全包加密方法。
為了實現(xiàn)上述目的,本發(fā)明的實施例提供一種基于rc4算法的代碼全包加密方法,包括如下步驟:
步驟s1,服務(wù)器采用rc4算法對app的代碼進行加密處理,包括:
步驟s11,所述服務(wù)器獲取所述app的應(yīng)用包名和時間戳,構(gòu)造全局密文密鑰m1;
步驟s12,采用密鑰私有算法從所述全局密文密鑰m1中摘取,得到代碼密鑰m2和摘要密鑰m3,利用代碼密鑰m2對app應(yīng)用包的代碼進行加密,得到代碼密文;利用摘要密鑰m3對所述app的數(shù)字證書摘要進行加密,得到摘要密文s2;
步驟s13,采用密鑰算法將所述全局密文密鑰m1和所述摘要密文s2進行混淆處理,得到被打散后的密鑰mm1和證書摘要密文ss2,并將mm1和ss2寫入代碼文件cf1中進行存儲;
步驟s14,編譯app安裝包,按照c語言編譯規(guī)范將cf1編譯為只有cpu能識別的機器碼,編譯完成后使用數(shù)字證書對安裝包文件進行簽名;
步驟s2,所述app在啟動運行后,提取所述mm1和ss2,并根據(jù)密鑰私有算法將其還原為全局密文密鑰m1和摘要密文s2,從所述m1中摘要得到摘要密鑰m3,以m3為密鑰采用rc4算法對app的數(shù)字證書簽名摘要s3進行加密,得到證書摘要密文s4,判斷所述證書摘要密文s4與所述摘要密文s2是否一致,如果是則執(zhí)行步驟s3;
步驟s3,所述客戶端對所述app的代碼加密文件進行解密,包括:
步驟s31,采用密鑰私有算法從步驟s2中的密鑰m1中摘取,得到密鑰m2,
步驟s32,利用所述m2對從app安裝包中讀取的代碼加密文件進行解密處理,獲得代碼明文文件。
進一步,所述app應(yīng)用包的代碼文件包括:html、javascript、css代碼文件。
進一步,在所述步驟s11中,所述服務(wù)器從數(shù)據(jù)庫讀取當(dāng)前app的應(yīng)用包名,并做除冗余處理,得到字符串k1,獲取當(dāng)前世界時時間戳,并做混淆處理,得到字符串k2以確保密鑰的唯一性。
進一步,在所述步驟s12中,利用代碼密鑰m2對app應(yīng)用包的代碼進行加密,包括如下步驟:
所述服務(wù)器從存儲中遍歷讀取當(dāng)前app的html、javascript、css代碼文件,依次形成二進制buffer1;
以m2為密鑰,使用標(biāo)準(zhǔn)rc4對稱加密算法對buffer1進行加密運算處理,得到密文buffer2;
保持html、javascript、css代碼文件在工程p1中的文件名及路徑不變,并將buffer2寫入對應(yīng)文件,其中,html、javascript、css代碼文件將變?yōu)槭褂萌魏未a編輯器均不可讀的密文。
進一步,在所述步驟s12中,利用摘要密鑰m3對所述app的數(shù)字證書摘要進行加密,包括如下步驟:
所述服務(wù)器從存儲中取得當(dāng)前app的簽名所需數(shù)字證書cert1,并獲取其摘要s1;
以m3為密鑰,使用標(biāo)準(zhǔn)rc4對稱加密算法對s1進行加密運算處理,得到證書摘要密文s2。
進一步,在所述步驟s2中,
判斷所述證書摘要密文s4與所述摘要密文s2是否一致,
如果一致,則判斷app的簽名數(shù)字證書來自服務(wù)器,判斷當(dāng)前app完整,未被破解篡改或者被二次打包,執(zhí)行步驟s3進行解密,正常運行app;
如果不一致,則判斷app已被破解并使用新的數(shù)字證書進行二次打包后簽名,遭到篡改,應(yīng)當(dāng)立即終止執(zhí)行。
進一步,步驟s32之后,還包括如下步驟:
通過hash結(jié)構(gòu)h1保存代碼明文文件至系統(tǒng)內(nèi)存,當(dāng)app再次需要執(zhí)行該代碼文件時,則直接從內(nèi)存獲取使用該代碼明文文件,實現(xiàn)對資源的加速讀??;
應(yīng)用引擎執(zhí)行保存于代碼明文文件中的明文狀態(tài)的html、javascript、css代碼;
app終止運行,將隨系統(tǒng)清理該app占用的內(nèi)存而被回收。
根據(jù)本發(fā)明實施例的基于rc4算法的代碼全包加密方法,提供一種基于標(biāo)準(zhǔn)rc4對稱加密算法的對html、javascript、css源代碼加密方法,經(jīng)過加密后的代碼將為不可讀的密文,無法使用代碼編輯器對其進行閱讀,有效的保護了app源代碼的安全。
1、基于標(biāo)準(zhǔn)rc4對稱加密算法和私有密鑰生成算法相結(jié)合,達到效率和安全性兼顧的效果;
2、采用動態(tài)密鑰,每次編譯app安裝包都生成并使用新的密鑰,密鑰僅在本次編譯的app中有效,即使密鑰被黑客截取,也僅影響該版本app,其他版本不受影響,進一步提升了安全性;
3、本發(fā)明使用動態(tài)加密技術(shù),通過服務(wù)器自動加密代碼,app運行時自動解密代碼。使用者只需要在編譯app時勾選代碼加密選項,服務(wù)器在編譯app安裝包時將該app對應(yīng)的html、javascript、css代碼自動加密,當(dāng)該app安裝到移動終端后,在運行過程中實時解密,app退出即銷毀,不留下解密痕跡,具有易用性和對用戶友好性;
4、加密方法對代碼產(chǎn)生零修改,零影響。加密不改變代碼量大小,加密后的代碼不會比加密前多出一個字節(jié),代碼加密前后,app的運行效率、使用體驗不受影響;
5、使用者在開發(fā)app的過程中,無需針對代碼保護問題投入額外的時間,按照正常的開發(fā)流程進行即可;
6、針對app的潛在安全問題,規(guī)定了一個安全區(qū)域,僅對該區(qū)域內(nèi)代碼進行加解密保護,區(qū)域外代碼遵循使用者開發(fā)經(jīng)驗靈活處理;
7、實現(xiàn)了統(tǒng)一的代碼資源標(biāo)準(zhǔn),在處理被保護代碼時,重新分配app資源的使用方式,統(tǒng)一資源管理,實現(xiàn)加速資源加載,節(jié)省系統(tǒng)開銷,使得加密代碼后的app在運行過程中能提速運行;
8、密鑰同app數(shù)字證書綁定,防止app被二次打包,可有效防止app代碼被反編譯,被篡改,被竊取數(shù)據(jù),被盜版,保護軟件知識產(chǎn)權(quán);
9、本發(fā)明兼容性強,兼容所有搭載android和ios操作系統(tǒng)的終端設(shè)備。
本發(fā)明附加的方面和優(yōu)點將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實踐了解到。
附圖說明
本發(fā)明的上述和/或附加的方面和優(yōu)點從結(jié)合下面附圖對實施例的描述中將變得明顯和容易理解,其中:
圖1為根據(jù)本發(fā)明實施例的基于rc4算法的代碼全包加密方法的流程圖;
圖2為根據(jù)本發(fā)明實施例的服務(wù)器端加密的流程圖;
圖3為根據(jù)本發(fā)明實施例的客戶端防二次打包的流程圖;
圖4為根據(jù)本發(fā)明實施例的客戶端解密的流程圖;
圖5a至圖5f分別為根據(jù)本發(fā)明實施例的三組代碼加密前后的對比效果圖。
具體實施方式
下面詳細描述本發(fā)明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,旨在用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。
本發(fā)明提出一種基于rc4算法的代碼全包加密方法,基于標(biāo)準(zhǔn)rc4對稱加密算法的對html、javascript、css源代碼加密方法,主要用于移動應(yīng)用(app)開發(fā)領(lǐng)域。本發(fā)明通過在服務(wù)器端對app的html、javascript、css代碼進行加密處理,對app的數(shù)字證書摘要做加密處理,并編譯app安裝包;移動終端使用者在安裝并啟動app時,應(yīng)用引擎對app做是否被二次打包校驗,并實施解密html、javascript、css代碼。
如圖1所示,本發(fā)明實施例的基于rc4算法的代碼全包加密方法,包括如下步驟:
步驟s1,服務(wù)器采用rc4算法對app的代碼進行加密處理,包括:
步驟s11,服務(wù)器獲取app的應(yīng)用包名和時間戳,構(gòu)造全局密文密鑰m1。
具體地,參考圖1,服務(wù)器端程序自動構(gòu)造編譯app安裝包所需工程p1。服務(wù)器使用密鑰私有算法構(gòu)造rc4加密算法所需密鑰,包括:從數(shù)據(jù)庫讀取當(dāng)前app的應(yīng)用包名,并做除冗余處理,得到字符串k1,獲取當(dāng)前世界時時間戳,并做混淆處理,得到字符串k2以確保密鑰的唯一性。使用密鑰私有算法對k1和k2進行加密處理,得到全局密文密鑰m1。
rc4對稱算法使用起來簡單快捷,密鑰較短,且破譯困難。對稱算法的安全性依賴于密鑰,泄漏密鑰就意味著任何人都可以對加密的數(shù)據(jù)進行解密。本發(fā)明通過一套私有算法進行運算生成密鑰并存儲,在該私有算法未公開的情況下,可有效保證密鑰的安全性。
步驟s12,采用密鑰私有算法從全局密文密鑰m1中摘取,得到代碼密鑰m2和摘要密鑰m3,利用代碼密鑰m2對app應(yīng)用包的代碼進行加密,得到代碼密文;利用摘要密鑰m3對app的數(shù)字證書摘要進行加密,得到摘要密文s2。
在本發(fā)明的一個實施例中,app應(yīng)用包的代碼文件包括:html、javascript、css代碼文件。
具體地,使用密鑰私有算法從密鑰m1中摘取,得到密鑰m2,作為本次加密運算的密鑰;.服務(wù)器從存儲中遍歷讀取當(dāng)前app的html、javascript、css代碼文件,依次形成二進制buffer1。
具體地,利用代碼密鑰m2對app應(yīng)用包的代碼進行加密,包括如下步驟:
服務(wù)器從存儲中遍歷讀取當(dāng)前app的html、javascript、css代碼文件,依次形成二進制buffer1;
以m2為密鑰,使用標(biāo)準(zhǔn)rc4對稱加密算法對buffer1進行加密運算處理,得到密文buffer2;
保持html、javascript、css代碼文件在工程p1中的文件名及路徑不變,并將buffer2寫入對應(yīng)文件,其中,html、javascript、css代碼文件將變?yōu)槭褂萌魏未a編輯器均不可讀的密文。
經(jīng)此步驟處理后,html、javascript、css代碼文件將變?yōu)槭褂萌魏未a編輯器均不可讀的密文,如圖5a至圖5f所示。
其中,加密前的html代碼如圖a所示,加密后的html代碼如圖b所示。加密前的javascript代碼如圖c所示,加密后的javascript代碼如圖d所示。加密前的css代碼如圖e所示,加密后的css代碼如圖f所示。
利用摘要密鑰m3對app的數(shù)字證書摘要進行加密,包括如下步驟:
使用密鑰私有算法從密鑰m1中摘取,得到密鑰m3;服務(wù)器從存儲中取得當(dāng)前app的簽名所需數(shù)字證書cert1,并獲取其摘要s1。然后,以m3為密鑰,使用標(biāo)準(zhǔn)rc4對稱加密算法對s1進行加密運算處理,得到證書摘要密文s2。
步驟s13,采用密鑰算法將全局密文密鑰m1和摘要密文s2進行混淆處理,得到被打散后的密鑰mm1和證書摘要密文ss2,并將mm1和ss2寫入工程p1的c語言代碼文件cf1中進行存儲。
步驟s14,編譯app安裝包,按照c語言編譯規(guī)范將cf1編譯為只有cpu能識別的機器碼,編譯完成后使用數(shù)字證書對安裝包文件進行簽名;
具體地,服務(wù)器程序開始編譯app工程p1,并按照c語言編譯規(guī)范將cf1編譯為只有cpu能識別的機器碼,有效的保護了密鑰m1和數(shù)字證書摘要s2的唯一性和不被篡改;編譯完成后使用數(shù)字證書cert1對安裝包文件進行簽名。
移動終端操作系統(tǒng)要求每一個安裝進系統(tǒng)的應(yīng)用程序都是經(jīng)過數(shù)字證書簽名的,未簽名的應(yīng)用程序?qū)o法安裝。通過使用數(shù)字證書對app安裝包進行簽名,實現(xiàn)應(yīng)用程序包的自我認證,標(biāo)識app的所有者,因此持有數(shù)字證書即意味對該app的所有權(quán)。
步驟s2,如圖2所示,app在啟動運行后,提取mm1和ss2,并根據(jù)密鑰私有算法將其還原為全局密文密鑰m1和摘要密文s2,從m1中摘要得到摘要密鑰m3,以m3為密鑰采用rc4算法對app的數(shù)字證書簽名摘要s3進行加密,得到證書摘要密文s4,判斷證書摘要密文s4與摘要密文s2是否一致,如果是則執(zhí)行步驟s3。
具體地,app在移動終端啟動運行之初,應(yīng)用引擎從內(nèi)存中取得中被打散后的密鑰mm1和證書摘要密文ss2,根據(jù)密鑰私有算法將其還原為m1和s2。使用密鑰私有算法從密鑰m1中摘取,得到密鑰m3;
應(yīng)用引擎獲取當(dāng)前app的數(shù)字證書簽名摘要s3,以m3為密鑰,使用標(biāo)準(zhǔn)rc4對稱加密算法對s3進行加密運算處理,得到證書摘要密文s4。判斷證書摘要密文s4與摘要密文s2是否一致,如果一致,說明本app的簽名數(shù)字證書來自服務(wù)器端,可認為當(dāng)前app完整,未被破解篡改或者被二次打包,應(yīng)當(dāng)執(zhí)行步驟s3的解密html、javascript、css步驟,正常運行app;如果不一致,則說明app已被破解并使用新的數(shù)字證書進行二次打包后簽名,遭到篡改,應(yīng)當(dāng)立即終止執(zhí)行;
步驟s3,如圖3所示,客戶端對app的代碼加密文件進行解密,包括:
步驟s31,采用密鑰私有算法從步驟s2中的密鑰m1中摘取,得到密鑰m2,應(yīng)用引擎從app安裝包中讀取密文狀態(tài)下的html、javascript、css代碼文件,單獨形成二進制buffer3。
步驟s32,以m2為密鑰,使用標(biāo)準(zhǔn)rc4對稱加密算法對buffer3進行解密運算處理,得到明文buffer4。
需要說明的是,步驟s32之后,還包括如下步驟:通過hash結(jié)構(gòu)h1保存明文buffer4至系統(tǒng)內(nèi)存,當(dāng)app再次需要執(zhí)行該代碼文件時,則直接從內(nèi)存獲取使用該buffer4,實現(xiàn)對資源的加速讀?。粦?yīng)用引擎執(zhí)行保存于buffer4中的明文狀態(tài)的html、javascript、css代碼;app終止運行,h1將隨系統(tǒng)清理該app占用的內(nèi)存而被回收,不留下任何痕跡。
本發(fā)明實施例的基于rc4算法的代碼全包加密方法,采用以下技術(shù):可解密并執(zhí)行html、javascript、css代碼文件的應(yīng)用引擎deepengine;服務(wù)器端動態(tài)對html、javascript、css代碼加密技術(shù);服務(wù)器端動態(tài)密鑰生成技術(shù),特別是密鑰私有算法技術(shù);服務(wù)器端智能編譯app安裝包技術(shù);app端對html、javascript、css代碼實時解密技術(shù);app端防安裝包被二次打包技術(shù)。
本發(fā)明實施例的基于rc4算法的代碼全包加密方法,可以實現(xiàn)以下功能:
1、向使用者提供可以解密并執(zhí)行html、javascript、css代碼文件的應(yīng)用引擎deepengine;
2、向使用者提供標(biāo)準(zhǔn)rc4對稱加密算法所需密鑰的私有算法,在本交底書中簡稱密鑰私有算法;
3、服務(wù)器端在編譯app(又稱客戶端)安裝包之前,使用標(biāo)準(zhǔn)rc4對稱加密算法和通過密鑰私有算法運算得到的密鑰,對處于明文狀態(tài)的html、javascript、css代碼文件進行加密運算,得到加密后的密文文件;
4、服務(wù)器端進行app安裝包的編譯,并將密文狀態(tài)下的html、javascript、css代碼文件及應(yīng)用引擎編譯到app安裝包中;
5、客戶端使用者在安裝并啟動app運行時,應(yīng)用引擎先使用標(biāo)準(zhǔn)rc4對稱加密算法對處于密文狀態(tài)的html、javascript、css代碼文件進行解密運算,得到解密后的明文代碼,然后交給應(yīng)用引擎執(zhí)行;
6、以上步驟使得從app安裝文件中解壓獲得的將是html、javascript、css代碼文件的密文文件,無法使用任何代碼編輯器進行閱讀查看,同時又不影響app的運行效率和體驗,達到了防止app代碼被反編譯,被篡改,被竊取數(shù)據(jù),被盜版,保護軟件知識產(chǎn)權(quán)等目的。
根據(jù)本發(fā)明實施例的基于rc4算法的代碼全包加密方法,提供一種基于標(biāo)準(zhǔn)rc4對稱加密算法的對html、javascript、css源代碼加密方法,經(jīng)過加密后的代碼將為不可讀的密文,無法使用代碼編輯器對其進行閱讀,有效的保護了app源代碼的安全。
1、基于標(biāo)準(zhǔn)rc4對稱加密算法和私有密鑰生成算法相結(jié)合,達到效率和安全性兼顧的效果;
2、采用動態(tài)密鑰,每次編譯app安裝包都生成并使用新的密鑰,密鑰僅在本次編譯的app中有效,即使密鑰被黑客截取,也僅影響該版本app,其他版本不受影響,進一步提升了安全性;
3、本發(fā)明使用動態(tài)加密技術(shù),通過服務(wù)器自動加密代碼,app運行時自動解密代碼。使用者只需要在編譯app時勾選代碼加密選項,服務(wù)器在編譯app安裝包時將該app對應(yīng)的html、javascript、css代碼自動加密,當(dāng)該app安裝到移動終端后,在運行過程中實時解密,app退出即銷毀,不留下解密痕跡,具有易用性和對用戶友好性;
4、加密方法對代碼產(chǎn)生零修改,零影響。加密不改變代碼量大小,加密后的代碼不會比加密前多出一個字節(jié),代碼加密前后,app的運行效率、使用體驗不受影響;
5、使用者在開發(fā)app的過程中,無需針對代碼保護問題投入額外的時間,按照正常的開發(fā)流程進行即可;
6、針對app的潛在安全問題,規(guī)定了一個安全區(qū)域,僅對該區(qū)域內(nèi)代碼進行加解密保護,區(qū)域外代碼遵循使用者開發(fā)經(jīng)驗靈活處理;
7、實現(xiàn)了統(tǒng)一的代碼資源標(biāo)準(zhǔn),在處理被保護代碼時,重新分配app資源的使用方式,統(tǒng)一資源管理,實現(xiàn)加速資源加載,節(jié)省系統(tǒng)開銷,使得加密代碼后的app在運行過程中能提速運行;
8、密鑰同app數(shù)字證書綁定,防止app被二次打包,可有效防止app代碼被反編譯,被篡改,被竊取數(shù)據(jù),被盜版,保護軟件知識產(chǎn)權(quán);
9、本發(fā)明兼容性強,兼容所有搭載android和ios操作系統(tǒng)的終端設(shè)備。
在本說明書的描述中,參考術(shù)語“一個實施例”、“一些實施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點包含于本發(fā)明的至少一個實施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不一定指的是相同的實施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點可以在任何的一個或多個實施例或示例中以合適的方式結(jié)合。
盡管上面已經(jīng)示出和描述了本發(fā)明的實施例,可以理解的是,上述實施例是示例性的,不能理解為對本發(fā)明的限制,本領(lǐng)域的普通技術(shù)人員在不脫離本發(fā)明的原理和宗旨的情況下在本發(fā)明的范圍內(nèi)可以對上述實施例進行變化、修改、替換和變型。本發(fā)明的范圍由所附權(quán)利要求及其等同限定。