本發(fā)明涉及一種代碼加密方法,具體涉及一種基于hybridapp自身特征的前端代碼加密方法,屬于移動(dòng)終端應(yīng)用安全技術(shù)領(lǐng)域。
背景技術(shù):
hybridapp是指混合開發(fā)應(yīng)用程序,主要以js+native兩者相互調(diào)用為主,從開發(fā)層面實(shí)現(xiàn)“一次開發(fā),多處運(yùn)行”的機(jī)制,成為真正適合跨平臺(tái)開發(fā)的應(yīng)用。hybridapp兼具了nativeapp良好用戶體驗(yàn)的優(yōu)勢(shì),也兼具了webapp使用html5跨平臺(tái)開發(fā)低成本的優(yōu)勢(shì)。據(jù)統(tǒng)計(jì)目前有超過50%的移動(dòng)應(yīng)用是使用的混合開發(fā)技術(shù)。
隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,移動(dòng)應(yīng)用安全已成為開發(fā)者/發(fā)布者/使用者共同關(guān)注的熱點(diǎn)問題。目前市場(chǎng)上針對(duì)nativeapp一般是采用加殼的方式進(jìn)行應(yīng)用加固,但該類加殼只局限于dex文件。js代碼是作為資源文件存在于app包中,其相較于本地代碼更容易獲得,于是針對(duì)hybridapp中js代碼的保護(hù)成了開發(fā)者研究的重點(diǎn)。
javascript是一種解釋性腳本語言,執(zhí)行前代碼不進(jìn)行預(yù)編譯。所以該類代碼文件不能像java文件那樣在內(nèi)存中進(jìn)行加解密。目前js代碼的加密方式有編碼解碼字符串、使用轉(zhuǎn)義字符、添加空字符、添加無用內(nèi)容等,但這些大多只能起到混淆的作用,稍微耗費(fèi)一些時(shí)間就可以得到還原后代碼,所以最為安全的還是使用加密解密算法。
目前針對(duì)hybridapp中js代碼的保護(hù)一般是將代碼加密,然后將解密邏輯和密文整合成一個(gè)js文件。此類加密方法中密鑰被竊取后則可以很輕易的對(duì)js文件進(jìn)行解密,獲得源碼,于是密鑰的選取與保存成了關(guān)鍵問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種新的hybridapp前端代碼加密方法,所要解決的主要問題是加解密涉及的密鑰選取與密鑰隱藏。利用appdex文件的md5值作為加解密密鑰,并將密鑰分做兩段,一段存儲(chǔ)在前端代碼中一段存儲(chǔ)在java代碼中,解密時(shí)前端代碼將兩段密鑰拼接進(jìn)行解密。該方法在保證了運(yùn)行效率的前提下,有效實(shí)現(xiàn)了密鑰隱藏,提高了前端代碼的安全性。
為了實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案。
基于hybridapp自身特征的前端代碼加密方法,包括如下步驟:
步驟1,計(jì)算hybridapp的dex文件的md5值,并保存;
步驟2,對(duì)前端js代碼文件進(jìn)行加密,加密密鑰為步驟1所得的md5值;
步驟3,將步驟2所得md5值分做兩段,記做密鑰段a和密鑰段b;
步驟4,將密鑰段a分散插入js代碼的加密密文中;
步驟5,將密鑰段b保存在調(diào)用js頁(yè)面的對(duì)應(yīng)java函數(shù)中;
步驟6,解密時(shí)首先按照規(guī)律從密文中提取密鑰段a然后從java代碼中提取密鑰段b并將兩者進(jìn)行拼接,得到解密密鑰。
更進(jìn)一步的方案是:
步驟2中,采用任意對(duì)稱加密算法對(duì)前端js代碼文件進(jìn)行加密。
更進(jìn)一步的方案是:
步驟3中,采用任意比例對(duì)md5值分段。
更進(jìn)一步的方案是:
步驟3中,采用等分法對(duì)md5值分段,密鑰段a和密鑰段b的長(zhǎng)度都是64位。
更進(jìn)一步的方案是:
步驟4的具體步驟如下:
步驟4.1,計(jì)算密文長(zhǎng)度l;
步驟4.2,生成[0,l]的16個(gè)隨機(jī)數(shù),并按照從小到大順序排列,將密鑰分字節(jié)分別插入密文中相應(yīng)位置。
更進(jìn)一步的方案是:
步驟5中,將密鑰段b整體插入java代碼中即可。
本發(fā)明的有益效果在于:
1,md5算法具有抗修改性、強(qiáng)抗碰撞性,本發(fā)明采用dex文件的md5值作為前端代碼的加密密鑰,保證了密鑰的唯一性;
2,本發(fā)明將密鑰分做兩段并將其中一段保存在調(diào)用js頁(yè)面的java代碼中,使得js頁(yè)面在脫離了app環(huán)境的情況下不可閱、不可用且不可破解,極大程度的保證了前端代碼的安全。
附圖說明
圖1為本發(fā)明基于hybridapp自身體特征的加密流程圖。
具體實(shí)施方式
以下將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步描述,需要說明的是,本實(shí)施例以本技術(shù)方案為前提,給出詳細(xì)的實(shí)施方式和操作步驟,但本發(fā)明的保護(hù)范圍并不限于實(shí)施例。
一種基于hybridapp自身特征的加密方法,如圖1所示:
步驟1,利用python內(nèi)置的hashlib模塊計(jì)算hybridapp的dex文件的md5值,轉(zhuǎn)化成16進(jìn)制為d82f7b5eeab972b53adbc3c1dda9794c;
步驟2,利用aes算法對(duì)前端js代碼文件加密,加密密鑰為步驟1所得的md5值;
步驟3,將步驟2所得md5值等分做兩段,記做密鑰段a和密鑰段b;
步驟4,計(jì)算密文長(zhǎng)度l=224,生成[0,l]的16個(gè)隨機(jī)數(shù)并按從小到大排序[31,41,47,59,77,83,90,100,143,163,167,173,186,197,219,220],將密鑰段a分字節(jié)分別插入密文中的相應(yīng)位置。
密文為:
eb3114b0621f234f228e159385c183478c7d5251bf744c3c728275e260daebd8794c4f26766b9c126f45a1c84d15355bd2c924595d0ff06f6bc65be131e973666e5335a1d0332518dc46563b3336194fb9cde6918eb025594896014cb6e7a736b15cddefda243e478dfcdcf8ce500706
插入密鑰后的文件為:
eb3114b0621f234f228e159385c183d478c7d52581bf7424c3c728275ef260daebd8794c4f267766b9bc126f455a1c84d15e355bd2c924595d0ff06f6bc65be131e973666e5335ea1d0332518dc46563b3a336b194fb99cde6918eb02755948960142cb6e7a736b15cddefda24b53e478dfcdcf8ce500706
其中下劃線字符為密鑰。
步驟5,將密鑰段b整體保存在調(diào)用js頁(yè)面的對(duì)應(yīng)java函數(shù)中;
步驟6,解密時(shí)首先按照規(guī)律從密文中提取密鑰段a然后從java代碼中提取密鑰段b并將兩者進(jìn)行拼接,得到解密密鑰。
對(duì)于本領(lǐng)域的技術(shù)人員來說,可以根據(jù)以上的技術(shù)方案和構(gòu)思,給出各種相應(yīng)的改變和變形,而所有的這些改變和變形都應(yīng)該包括在本發(fā)明權(quán)利要求的保護(hù)范圍之內(nèi)。
盡管這里參照本發(fā)明的解釋性實(shí)施例對(duì)本發(fā)明進(jìn)行了描述,上述實(shí)施例僅為本發(fā)明較佳的實(shí)施方式,本發(fā)明的實(shí)施方式并不受上述實(shí)施例的限制,應(yīng)該理解,本領(lǐng)域技術(shù)人員可以設(shè)計(jì)出很多其他的修改和實(shí)施方式,這些修改和實(shí)施方式將落在
本技術(shù):
公開的原則范圍和精神之內(nèi)。