本發(fā)明涉及通信領(lǐng)域的數(shù)據(jù)處理技術(shù),尤其涉及一種加密方法及裝置。
背景技術(shù):
在當(dāng)今的數(shù)據(jù)時(shí)代,數(shù)據(jù)安全性一直是各行各業(yè)關(guān)注的焦點(diǎn)問題。數(shù)據(jù)加密無疑是數(shù)據(jù)安全的強(qiáng)有力的保障手段。如今,數(shù)據(jù)加密技術(shù)已經(jīng)被廣泛應(yīng)用于終端、服務(wù)器、網(wǎng)絡(luò)通信等領(lǐng)域,各種加密算法也層出不窮。針對(duì)android系統(tǒng),現(xiàn)有技術(shù)中對(duì)設(shè)備中數(shù)據(jù)的加密主要有以下幾種方法:
第一,利用android終端設(shè)備的文件系統(tǒng)記錄的已使用的數(shù)據(jù)塊的信息對(duì)android終端設(shè)備的用戶分區(qū)進(jìn)行加密,避免了對(duì)用戶無效數(shù)據(jù)進(jìn)行加密。第二,通過動(dòng)態(tài)鏈接庫注入的方法對(duì)存在的android文件進(jìn)行加密。具體的,通過hook相關(guān)系統(tǒng)函數(shù),尋找對(duì)文件數(shù)據(jù)進(jìn)行加密的應(yīng)用程序編程接口(api,applicationprogramminginterface),以對(duì)文件進(jìn)行加密,當(dāng)用戶讀取文件時(shí),再次hook相關(guān)系統(tǒng)函數(shù),利用秘鑰對(duì)該文件進(jìn)行解密。第三,通過在android設(shè)備中內(nèi)置加密模塊的方法對(duì)設(shè)備中的文件進(jìn)行加密。android終端設(shè)備中內(nèi)置的加密模塊可以有多種,如內(nèi)置加密程序、內(nèi)置硬件加密模塊、內(nèi)置加密卡等方式對(duì)文件進(jìn)行加密。
然而,采用現(xiàn)有技術(shù)實(shí)現(xiàn)方法,由于隨著android設(shè)備的發(fā)展,內(nèi)存空間越來越大,當(dāng)系統(tǒng)中的文件比較大時(shí),對(duì)該文件進(jìn)行加密的過程和時(shí)間就會(huì)越長(zhǎng),這樣,會(huì)導(dǎo)致對(duì)于大文件的加密效率極其低下。例如,采用現(xiàn)有技術(shù)對(duì)一個(gè)1g大小的視頻文件加密有時(shí)候要達(dá)到10分鐘左右,這是無法接受的。
技術(shù)實(shí)現(xiàn)要素:
為解決上述技術(shù)問題,本發(fā)明實(shí)施例期望提供一種加密方法及裝置,能夠 在對(duì)較大文件進(jìn)行加密的過程中,減少加密時(shí)間,提高了文件加密的效率。
本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
本發(fā)明實(shí)施例提供一種加密方法,包括:
獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊,所述第一文件為下載過程中正在寫入待下載文件的數(shù)據(jù)的臨時(shí)文件,所述第i個(gè)數(shù)據(jù)塊為所述待下載文件中大小不超過第一預(yù)設(shè)范圍的連續(xù)數(shù)據(jù),其中,i≥1;
對(duì)所述第i個(gè)數(shù)據(jù)塊進(jìn)行加密;
將加密后的所述第i個(gè)數(shù)據(jù)塊寫入第二文件,所述第二文件為已加密數(shù)據(jù)的存儲(chǔ)文件;
當(dāng)所述第一文件中不存在未加密的第i+1個(gè)數(shù)據(jù)塊時(shí),結(jié)束加密過程。
在上述方案中,所述結(jié)束加密過程之前,所述方法還包括:
當(dāng)將所述待下載文件寫入所述第一文件完成時(shí),將所述第一文件合成為相應(yīng)的第一應(yīng)用文件;
當(dāng)所述第一文件中不存在未加密的所述第i+1個(gè)數(shù)據(jù)塊時(shí),將所述第二文件合成為相應(yīng)的第二應(yīng)用文件;
采用所述第二應(yīng)用文件代替所述第一應(yīng)用文件。
在上述方案中,所述獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊之前,所述方法還包括:
檢測(cè)到下載指令時(shí),生成所述第一文件和所述第二文件。
在上述方案中,所述生成所述第一文件之后,所述獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊之前,所述方法還包括:
根據(jù)所述下載指令,將所述第i個(gè)數(shù)據(jù)塊從所述待下載文件中寫入所述第一文件。
在上述方案中,所述對(duì)所述第i個(gè)數(shù)據(jù)塊進(jìn)行加密,包括:
采用動(dòng)態(tài)鏈接庫注入的方法對(duì)所述第i個(gè)數(shù)據(jù)塊進(jìn)行加密。
本發(fā)明實(shí)施例提供一種加密裝置,包括:
獲取單元,用于獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊,所述第一文件 為下載過程中正在寫入待下載文件的數(shù)據(jù)的臨時(shí)文件,所述第i個(gè)數(shù)據(jù)塊為所述待下載文件中大小不超過第一預(yù)設(shè)范圍的連續(xù)數(shù)據(jù),其中,i≥1;
加密單元,用于對(duì)所述獲取單元獲取的所述第i個(gè)數(shù)據(jù)塊進(jìn)行加密;
寫入單元,用于將所述加密單元加密后的所述第i個(gè)數(shù)據(jù)塊寫入第二文件,所述第二文件為已加密數(shù)據(jù)的存儲(chǔ)文件;
結(jié)束單元,用于當(dāng)所述獲取單元獲取的所述第一文件中不存在未加密的第i+1個(gè)數(shù)據(jù)塊時(shí),結(jié)束加密過程。
在上述裝置中,所述加密裝置還包括:檢測(cè)單元和生成單元;
所述生成單元,用于所述獲取單元獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊之前,所述檢測(cè)單元檢測(cè)到下載指令時(shí),生成所述第一文件和所述第二文件。
在上述裝置中,所述寫入單元,還用于所述生成單元生成所述第一文件之后,所述獲取單元獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊之前,根據(jù)所述檢測(cè)單元檢測(cè)的所述下載指令,將所述獲取單元獲取的所述第i個(gè)數(shù)據(jù)塊從所述待下載文件中寫入所述第一文件。
在上述裝置中,所述加密裝置還包括:合成單元和替換單元;
所述合成單元,用于所述寫入單元根據(jù)所述下載指令,將所述第i個(gè)數(shù)據(jù)塊從所述待下載文件中寫入所述第一文件之前,當(dāng)所述寫入單元將所述待下載文件寫入所述生成單元生成的第一文件完成時(shí),將所述第一文件合成為相應(yīng)的第一應(yīng)用文件;以及所述寫入單元將所述第i個(gè)數(shù)據(jù)塊寫入第二文件之后,所述結(jié)束單元結(jié)束加密過程之前,當(dāng)所述生成單元生成的第一文件中不存在未加密的所述第i+1個(gè)數(shù)據(jù)塊時(shí),將所述生成單元生成的所述第二文件合成為相應(yīng)的第二應(yīng)用文件;
所述替換單元,用于所述合成單元將所述生成單元生成的所述第一文件合成為相應(yīng)的第一應(yīng)用文件,且將所述生成單元生成的所述第二文件合成為相應(yīng)的第二應(yīng)用文件之后,采用所述合成單元合成的所述第二應(yīng)用文件代替所述合成單元合成的所述第一應(yīng)用文件。
在上述裝置中,所述加密單元,具體用于采用動(dòng)態(tài)鏈接庫注入的方法對(duì)所 述獲取單元獲取的所述第i個(gè)數(shù)據(jù)塊進(jìn)行加密。
本發(fā)明實(shí)施例提供了一種加密方法及裝置,通過獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊,該第一文件為下載過程中正在寫入待下載文件的數(shù)據(jù)的臨時(shí)文件,該第i個(gè)數(shù)據(jù)塊為待下載文件中大小不超過第一預(yù)設(shè)范圍的連續(xù)數(shù)據(jù),其中,i≥1;對(duì)第i個(gè)數(shù)據(jù)塊進(jìn)行加密;將加密后的第i個(gè)數(shù)據(jù)塊寫入第二文件;當(dāng)?shù)谝晃募胁淮嬖谖醇用艿牡趇+1個(gè)數(shù)據(jù)塊時(shí),結(jié)束加密過程。采用上述技術(shù)實(shí)現(xiàn)方案,由于加載文件下載過程中的臨時(shí)文件的數(shù)據(jù)的同時(shí),加密裝置對(duì)臨時(shí)文件中滿足一定數(shù)據(jù)大小且未加密的數(shù)據(jù)塊進(jìn)行加密,直至臨時(shí)文件中加載完待加載文件的數(shù)據(jù),這樣,該加密裝置可以在臨時(shí)文件加載完數(shù)據(jù)后的較短時(shí)間內(nèi),完成了上述數(shù)據(jù)的加密過程,因此,在采用上述方案對(duì)較大文件進(jìn)行加密的過程時(shí),可以顯著地減少加密時(shí)間,從而提高了文件加密的效率。
附圖說明
圖1為本發(fā)明實(shí)施例提供的一種加密方法的流程圖一;
圖2為本發(fā)明實(shí)施例提供的一種加密方法的流程圖二;
圖3為本發(fā)明實(shí)施例提供的一種示例性的加密方法的流程示意圖;
圖4為本發(fā)明實(shí)施例提供的一種加密裝置的結(jié)構(gòu)示意圖一;
圖5為本發(fā)明實(shí)施例提供的一種加密裝置的結(jié)構(gòu)示意圖二;
圖6為本發(fā)明實(shí)施例提供的一種加密裝置的結(jié)構(gòu)示意圖三。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述。
需要說明的是,本發(fā)明實(shí)施例中的加密裝置可以為終端、服務(wù)器等具有文件加載、存儲(chǔ)功能的電子設(shè)備,也可以為集成在上述電子設(shè)備之外的具有文件加載、存儲(chǔ)功能的器件或裝置。下面以終端為執(zhí)行主體進(jìn)行實(shí)施例的說明。
實(shí)施例一
本發(fā)明實(shí)施例提供了一種加密方法,如圖1所示,該方法可以包括:
s101、獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊,該第一文件為下載過程中正在寫入待下載文件的數(shù)據(jù)的臨時(shí)文件,該第i個(gè)數(shù)據(jù)塊為待下載文件中大小不超過第一預(yù)設(shè)范圍的連續(xù)數(shù)據(jù),其中,i≥1。
本發(fā)明實(shí)施例是在上述終端中對(duì)進(jìn)行數(shù)據(jù)下載或加載后的文件要進(jìn)行加密時(shí)提出的,其發(fā)明構(gòu)思為:在終端中進(jìn)行一個(gè)文件的下載或加載時(shí),同時(shí)對(duì)已下載的數(shù)據(jù)部分進(jìn)行加密,即利用了空間置換時(shí)間的方法以減少加密時(shí)間,提高加密效率。
可選的,本發(fā)明實(shí)施例中的終端可以為移動(dòng)終端,具體的可以為具有文件加載、存儲(chǔ)功能的智能手機(jī)、平板電腦等。
需要說明的是,上述說明的終端可以為具有android系統(tǒng)的終端。
可選的,本發(fā)明實(shí)施例中待下載文件可以為應(yīng)用、視頻或音頻等文件。
需要說明的是,本發(fā)明實(shí)施例中,android系統(tǒng)在下載生成應(yīng)用、視頻等文件時(shí),該文件的下載進(jìn)程需要先產(chǎn)生一個(gè)臨時(shí)文件(.temp文件)即第一文件,然后不斷向該第一文件中寫入待下載文件的數(shù)據(jù),最后再合成最終需要產(chǎn)生的文件(如,.apk,.mp4等),即第一應(yīng)用文件。
具體的,在本發(fā)明實(shí)施例中,當(dāng)檢測(cè)到下載指令時(shí),從第一文件中開始寫入待下載文件的數(shù)據(jù)起,終端就開始讀取或獲取該第一文件中寫入的待下載文件的數(shù)據(jù),于是,當(dāng)該終端獲取到第一文件中未加密的第i數(shù)據(jù)塊時(shí),就可以同步對(duì)該第i數(shù)據(jù)塊進(jìn)行加密了。
需要說明的是,本發(fā)明實(shí)施例中的第i數(shù)據(jù)塊的大小可以為在預(yù)設(shè)范圍內(nèi)的一個(gè)數(shù)據(jù)塊。上述預(yù)設(shè)范圍可以為10k,具體的預(yù)設(shè)范圍的設(shè)置可以按照實(shí)際情況和實(shí)驗(yàn)進(jìn)行選取,本發(fā)明實(shí)施例不作限制。
特別的,在本發(fā)明實(shí)施例中,第i個(gè)數(shù)據(jù)塊是按照通過下載進(jìn)程寫入第一文件的待下載文件的數(shù)據(jù)的順序排列的。
進(jìn)一步地,終端在讀取第一文件中第i數(shù)據(jù)塊的時(shí)候,可以對(duì)該第i個(gè)數(shù)據(jù)塊進(jìn)行標(biāo)記,具體的標(biāo)記方式可以采用現(xiàn)有技術(shù)來實(shí)現(xiàn),這樣,該終端就可以 知道第一文件中的哪些數(shù)據(jù)已經(jīng)讀取過了或者已經(jīng)讀取到哪里了。
s102、對(duì)第i個(gè)數(shù)據(jù)塊進(jìn)行加密。
終端在獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊之后,該終端就可以對(duì)該第i個(gè)數(shù)據(jù)塊進(jìn)行加密過程了。
需要說明的是,本發(fā)明實(shí)施例中,終端在開始下載進(jìn)程后,就開始創(chuàng)建加密進(jìn)程,通過該加密進(jìn)程獲取到下載進(jìn)程中的第一文件中的待下載文件的第i個(gè)數(shù)據(jù)塊時(shí),就可以將該獲取到的第i個(gè)數(shù)據(jù)塊進(jìn)行加密。
具體的,終端可以采用動(dòng)態(tài)鏈接庫注入的方法對(duì)第i個(gè)數(shù)據(jù)塊進(jìn)行加密。更具體的,終端可以通過采用動(dòng)態(tài)鏈接庫注入方式,將殼代碼(shellcode)注入到終端設(shè)定的加密進(jìn)程中,再在shellcode中尋找系統(tǒng)加密進(jìn)程使用的應(yīng)用程序編程接口(api,applicationprogramminginterface),將該api作為在android系統(tǒng)加密進(jìn)程處設(shè)立或植入的監(jiān)測(cè)點(diǎn),捕獲和記錄android系統(tǒng)的終端發(fā)出和接收的加密前的第i數(shù)據(jù)塊,并基于android平臺(tái)對(duì)該加密前的第i數(shù)據(jù)塊進(jìn)行檢測(cè)分析,并對(duì)第i數(shù)據(jù)塊進(jìn)行加密。
s103、將加密后的第i個(gè)數(shù)據(jù)塊寫入第二文件,該第二文件為已加密數(shù)據(jù)的存儲(chǔ)文件。
終端在將第i個(gè)數(shù)據(jù)塊進(jìn)行加密之后,該終端就可以將加密后的第i個(gè)數(shù)據(jù)塊寫入在下載開始時(shí)該終端生成的、用于存儲(chǔ)已加密數(shù)據(jù)的存儲(chǔ)文件,即第二文件中。
具體的,本發(fā)明在上述描述的下載進(jìn)程產(chǎn)生第一文件(.temp文件)時(shí),利用鉤子(hook)函數(shù)捕獲當(dāng)前下載進(jìn)程行為,并同時(shí)在另一磁盤空間生成該第一文件的拷貝副本(.bak.temp文件),即第二文件,然后逐步將當(dāng)前下載進(jìn)程寫入第一文件(.temp)的第i個(gè)數(shù)據(jù)塊加密后寫入該第二文件(.bak.temp文件)中。當(dāng)終端把第一文件中的所有數(shù)據(jù)塊都加密完之后,最終將.bak.temp文件合成為最終需要產(chǎn)生的目標(biāo)文件(第二應(yīng)用文件),并覆蓋由.temp文件產(chǎn)生的第一應(yīng)用文件。這樣,最后輸出的第二應(yīng)用文件就是經(jīng)過加密的文件。
也就是說,第i個(gè)數(shù)據(jù)塊進(jìn)行完加密之后,或者是寫入第二文件之后,該 終端就可以對(duì)第一文件中的第i+1個(gè)數(shù)據(jù)塊進(jìn)行加密,直至第一文件中的全部寫入完成的待下載數(shù)據(jù)加密完成為止。
需要說明的是,由待下載文件大小的不確定性可知,終端獲取的i的個(gè)數(shù)是不確定的,但是,對(duì)于每個(gè)數(shù)據(jù)塊的加密過程都是按照上述s101-s103進(jìn)行的。
s104、當(dāng)?shù)谝晃募胁淮嬖谖醇用艿牡趇+1個(gè)數(shù)據(jù)塊時(shí),結(jié)束加密過程。
終端在將加密后的第i個(gè)數(shù)據(jù)塊寫入第二文件之后,該終端循環(huán)對(duì)第i+1個(gè)數(shù)據(jù)塊進(jìn)行同樣的加密處理,當(dāng)?shù)谝晃募胁淮嬖谖醇用艿牡趇+1個(gè)數(shù)據(jù)塊,即第一文件中的數(shù)據(jù)都已經(jīng)被獲取后進(jìn)行了加密時(shí),該終端就會(huì)結(jié)束這次的加密過程。
進(jìn)一步地,當(dāng)用戶讀取合成的第二文件時(shí),終端也可以再次hook相關(guān)系統(tǒng)函數(shù),利用秘鑰對(duì)該第二文件進(jìn)行解密。
可以理解的是,本發(fā)明實(shí)施例提供的加密方法可以有效地提高文件的加密效率,大大地縮短了文件加密的時(shí)間,保障系統(tǒng)文件安全性的同時(shí),增強(qiáng)了android終端用戶的使用體驗(yàn)。由于對(duì)小文件(小于1m的文件)的加密,各種加密方法的效率幾乎沒有什么差別(加密時(shí)間都在毫秒級(jí)),所以本發(fā)明實(shí)施例對(duì)過小的文件加密效率提升并不明顯。但是對(duì)于大文件,如視頻、音頻、圖像、應(yīng)用軟件等文件的加密,本發(fā)明實(shí)施例提供的加密方法可以將加密時(shí)間縮短95%以上。
本發(fā)明實(shí)施例所提供的一種加密方法,通過獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊,該第一文件為下載過程中正在寫入待下載文件的數(shù)據(jù)的臨時(shí)文件,該第i個(gè)數(shù)據(jù)塊為待下載文件中大小不超過第一預(yù)設(shè)范圍的連續(xù)數(shù)據(jù),其中,i≥1;對(duì)第i個(gè)數(shù)據(jù)塊進(jìn)行加密;將加密后的第i個(gè)數(shù)據(jù)塊寫入第二文件;當(dāng)?shù)谝晃募胁淮嬖谖醇用艿牡趇+1個(gè)數(shù)據(jù)塊時(shí),結(jié)束加密過程。采用上述技術(shù)實(shí)現(xiàn)方案,由于加載文件下載過程中的臨時(shí)文件的數(shù)據(jù)的同時(shí),終端對(duì)臨時(shí)文件中滿足一定數(shù)據(jù)大小且未加密的數(shù)據(jù)塊進(jìn)行加密,直至臨時(shí)文件中加載完待加載文件的數(shù)據(jù),這樣,該終端可以在臨時(shí)文件加載完數(shù)據(jù)后的較短時(shí)間內(nèi),完成了上述 數(shù)據(jù)的加密過程,因此,在采用上述方案對(duì)較大文件進(jìn)行加密的過程時(shí),可以顯著地減少加密時(shí)間,從而提高了文件加密的效率。
實(shí)施例二
本發(fā)明實(shí)施例提供了一種加密方法,如圖2所示,該方法可以包括:
s201、檢測(cè)到下載指令時(shí),生成第一文件和第二文件,該第一文件為下載過程中正在寫入待下載文件的數(shù)據(jù)的臨時(shí)文件,該第二文件為已加密數(shù)據(jù)的存儲(chǔ)文件。
本發(fā)明實(shí)施例是在上述終端中對(duì)進(jìn)行數(shù)據(jù)下載或加載后的文件要進(jìn)行加密時(shí)提出的,其發(fā)明構(gòu)思為:在終端中進(jìn)行一個(gè)文件的下載或加載時(shí),同時(shí)對(duì)已下載的數(shù)據(jù)部分進(jìn)行加密,即利用了空間置換時(shí)間的方法以減少加密時(shí)間,提高加密效率。
可選的,本發(fā)明實(shí)施例中的終端可以為移動(dòng)終端,具體的可以為具有文件加載、存儲(chǔ)功能的智能手機(jī)、平板電腦等。
需要說明的是,上述說明的終端可以為具有android系統(tǒng)的終端。
可選的,本發(fā)明實(shí)施例中待下載文件可以為應(yīng)用、視頻或音頻等文件。
需要說明的是,終端可以在android系統(tǒng)加密進(jìn)程處設(shè)立或植入的監(jiān)測(cè)點(diǎn),捕獲和記錄android系統(tǒng)的終端發(fā)出下載指令的時(shí)候。這樣,終端就可以實(shí)時(shí)獲知下載操作的進(jìn)行,為后面的加密進(jìn)程的開啟做準(zhǔn)備。
具體的,當(dāng)終端檢測(cè)到下載指令時(shí),可以在下載進(jìn)程中開始進(jìn)行待下載文件的下載過程,于是生成第一文件,同時(shí),在該終端還可以創(chuàng)建加密進(jìn)程,生成第二文件用于存儲(chǔ)已加密數(shù)據(jù),其中,該第一文件為下載過程中正在寫入待下載文件的數(shù)據(jù)的臨時(shí)文件。
需要說明的是,本發(fā)明實(shí)施例中的下載下載過程可以采用動(dòng)態(tài)鏈接庫的方法來實(shí)現(xiàn)。
s202、根據(jù)下載指令,將第i個(gè)數(shù)據(jù)塊從待下載文件中寫入第一文件,該第i個(gè)數(shù)據(jù)塊為待下載文件中大小不超過第一預(yù)設(shè)范圍的連續(xù)數(shù)據(jù),其中,i≥1。
需要說明的是,本發(fā)明實(shí)施例中,android系統(tǒng)在下載生成應(yīng)用、視頻等文 件時(shí),該文件的下載進(jìn)程需要先產(chǎn)生一個(gè)臨時(shí)文件(.temp文件)即第一文件,然后不斷向該第一文件中寫入待下載文件的數(shù)據(jù),最后再合成最終需要產(chǎn)生的文件(如,.apk,.mp4等),即第一應(yīng)用文件。
當(dāng)檢測(cè)到下載指令時(shí),終端生成第一文件之后,該終端可以根據(jù)下載指令進(jìn)行待下載文件的下載過程了。由于下載過程是數(shù)據(jù)打包傳輸?shù)倪^程,因此,寫入第一文件的可以數(shù)據(jù)塊有i個(gè)。
需要說明的是,本發(fā)明實(shí)施例中的第i數(shù)據(jù)塊的大小可以為在預(yù)設(shè)范圍內(nèi)的一個(gè)數(shù)據(jù)塊。上述預(yù)設(shè)范圍可以為10k,具體的預(yù)設(shè)范圍的設(shè)置可以按照實(shí)際情況和實(shí)驗(yàn)進(jìn)行選取,本發(fā)明實(shí)施例不作限制。
特別的,在本發(fā)明實(shí)施例中,第i個(gè)數(shù)據(jù)塊是按照通過下載進(jìn)程寫入第一文件的待下載文件的數(shù)據(jù)的順序排列的。
s203、獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊。
終端根據(jù)下載指令,將第i個(gè)數(shù)據(jù)塊從待下載文件中寫入第一文件之后,由于加密要耗費(fèi)時(shí)間,且第一文件中仍在源源不斷的寫入數(shù)據(jù)中,因此,該終端在創(chuàng)建了加密進(jìn)程,生成了第二文件之后,就讀取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊。
具體的,在本發(fā)明實(shí)施例中,當(dāng)檢測(cè)到下載指令時(shí),從第一文件中開始寫入待下載文件的數(shù)據(jù)起,終端就開始讀取或獲取該第一文件中寫入的待下載文件的數(shù)據(jù),于是,當(dāng)該終端獲取到第一文件中未加密的第i數(shù)據(jù)塊時(shí),就可以同步對(duì)該第i數(shù)據(jù)塊進(jìn)行加密了。
進(jìn)一步地,終端在讀取第一文件中第i數(shù)據(jù)塊的時(shí)候,可以對(duì)該第i個(gè)數(shù)據(jù)塊進(jìn)行標(biāo)記,具體的標(biāo)記方式可以采用現(xiàn)有技術(shù)來實(shí)現(xiàn),這樣,該終端就可以知道第一文件中的哪些數(shù)據(jù)已經(jīng)讀取過了或者已經(jīng)讀取到哪里了。
s204、采用動(dòng)態(tài)鏈接庫注入的方法對(duì)第i個(gè)數(shù)據(jù)塊進(jìn)行加密。
終端在獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊之后,該終端就可以對(duì)該第i個(gè)數(shù)據(jù)塊進(jìn)行加密過程了。
需要說明的是,本發(fā)明實(shí)施例中,終端在開始下載進(jìn)程后,就開始創(chuàng)建加 密進(jìn)程,通過該加密進(jìn)程獲取到下載進(jìn)程中的第一文件中的待下載文件的第i個(gè)數(shù)據(jù)塊時(shí),就可以將該獲取到的第i個(gè)數(shù)據(jù)塊進(jìn)行加密。
具體的,終端可以采用動(dòng)態(tài)鏈接庫注入的方法對(duì)第i個(gè)數(shù)據(jù)塊進(jìn)行加密。更具體的,終端可以通過采用動(dòng)態(tài)鏈接庫注入方式,將殼代碼(shellcode)注入到終端設(shè)定的加密進(jìn)程中,再在shellcode中尋找系統(tǒng)加密進(jìn)程使用的應(yīng)用程序編程接口(api,applicationprogramminginterface),將該api作為在android系統(tǒng)加密進(jìn)程處設(shè)立或植入的監(jiān)測(cè)點(diǎn),捕獲和記錄android系統(tǒng)的終端發(fā)出和接收的加密前的第i數(shù)據(jù)塊,并基于android平臺(tái)對(duì)該加密前的第i數(shù)據(jù)塊進(jìn)行檢測(cè)分析,并對(duì)第i數(shù)據(jù)塊進(jìn)行加密。
s205、將加密后的第i個(gè)數(shù)據(jù)塊寫入第二文件,該第二文件為已加密數(shù)據(jù)的存儲(chǔ)文件。
終端在將第i個(gè)數(shù)據(jù)塊進(jìn)行加密之后,該終端就可以將加密后的第i個(gè)數(shù)據(jù)塊寫入在下載開始時(shí)該終端生成的、用于存儲(chǔ)已加密數(shù)據(jù)的存儲(chǔ)文件,即第二文件中。
具體的,本發(fā)明在上述描述的下載進(jìn)程產(chǎn)生第一文件(.temp文件)時(shí),利用鉤子(hook)函數(shù)捕獲當(dāng)前下載進(jìn)程行為,并同時(shí)在另一磁盤空間生成該第一文件的拷貝副本(.bak.temp文件),即第二文件,然后逐步將當(dāng)前下載進(jìn)程寫入第一文件(.temp)的第i個(gè)數(shù)據(jù)塊加密后寫入該第二文件(.bak.temp文件)中。當(dāng)終端把第一文件中的所有數(shù)據(jù)塊都加密完之后,最終將.bak.temp文件合成為最終需要產(chǎn)生的目標(biāo)文件(第二應(yīng)用文件),并覆蓋由.temp文件產(chǎn)生的第一應(yīng)用文件。這樣,最后輸出的第二應(yīng)用文件就是經(jīng)過加密的文件。
也就是說,第i個(gè)數(shù)據(jù)塊進(jìn)行完加密之后,或者是寫入第二文件之后,該終端就可以對(duì)第一文件中的第i+1個(gè)數(shù)據(jù)塊進(jìn)行加密,直至第一文件中的全部寫入完成的待下載數(shù)據(jù)加密完成為止。
需要說明的是,由待下載文件大小的不確定性可知,終端獲取的i的個(gè)數(shù)是不確定的,但是,對(duì)于每個(gè)數(shù)據(jù)塊的加密過程都是按照上述s202-s205進(jìn)行的。
s206、當(dāng)將待下載文件寫入第一文件完成時(shí),將該第一文件合成為相應(yīng)的第一應(yīng)用文件。
終端根據(jù)下載指令,將第i個(gè)數(shù)據(jù)塊從待下載文件中寫入第一文件之后,由于待下載文件的大小是一定的,因此,第一文件中寫入的數(shù)據(jù)也是一定的,而當(dāng)待下載文件的數(shù)據(jù)全部寫入第一文件中式,根據(jù)下載進(jìn)程,該終端將第一文件合成為相應(yīng)的第一應(yīng)用文件。
s207、當(dāng)?shù)谝晃募胁淮嬖谖醇用艿牡趇+1個(gè)數(shù)據(jù)塊時(shí),將第二文件合成為相應(yīng)的第二應(yīng)用文件。
終端將加密后的第i個(gè)數(shù)據(jù)塊寫入第二文件之后,該終端就可以開始進(jìn)行第i+1個(gè)數(shù)據(jù)塊的獲取和加密,若此時(shí)終端已經(jīng)將寫完待下載數(shù)據(jù)的第一文件中的數(shù)據(jù)都加密時(shí),即第一文件中不存在未加密的第i+1個(gè)數(shù)據(jù)塊時(shí),該終端就可以將第二文件合成為第二應(yīng)用文件了。
需要說明的是,本發(fā)明實(shí)施例中的第一應(yīng)用文件與第二應(yīng)用文件的合成方法一致,合成的文件類型也一致。
s208、采用第二應(yīng)用文件代替第一應(yīng)用文件。
終端合成第一應(yīng)用文件和第二應(yīng)用文件之后,該終端就采用已加密好的第二應(yīng)用文件代替未加密的第一應(yīng)用文件,這樣,輸出的文件就是已經(jīng)加密的文件。
可以理解的是,由于本發(fā)明實(shí)施例在進(jìn)行第一文件的數(shù)據(jù)寫入時(shí),就可以同步進(jìn)行第一文件中的已寫入未加密的第i個(gè)數(shù)據(jù)塊加密,因此,在下載待下載文件的過程完成后不久,終端就完成了該第一文件的數(shù)據(jù)的加密工作,并存儲(chǔ)在第二文件中。而第一應(yīng)用文件為正常下載進(jìn)程結(jié)束時(shí)輸出的文件,第二應(yīng)用文件為加密的第二文件合成的,因此,屬于已加密的文件。因此,終端子下載完成的很短時(shí)間內(nèi),就得到了經(jīng)過加密的第二應(yīng)用文件。
s209、結(jié)束加密過程。
終端采用第二應(yīng)用文件代替第一應(yīng)用文件之后,該終端就會(huì)結(jié)束這次的加密過程。
進(jìn)一步地,當(dāng)用戶讀取合成的第二文件時(shí),終端也可以再次hook相關(guān)系統(tǒng)函數(shù),利用秘鑰對(duì)該第二文件進(jìn)行解密。
可以理解的是,本發(fā)明實(shí)施例提供的加密方法可以有效地提高文件的加密效率,大大地縮短了文件加密的時(shí)間,保障系統(tǒng)文件安全性的同時(shí),增強(qiáng)了android終端用戶的使用體驗(yàn)。由于對(duì)小文件(小于1m的文件)的加密,各種加密方法的效率幾乎沒有什么差別(加密時(shí)間都在毫秒級(jí)),所以本發(fā)明實(shí)施例對(duì)過小的文件加密效率提升并不明顯。但是對(duì)于大文件,如視頻、音頻、圖像、應(yīng)用軟件等文件的加密,本發(fā)明實(shí)施例提供的加密方法可以將加密時(shí)間縮短95%以上。
示例性的,如圖3所示,假設(shè)終端中的程序x從某服務(wù)器上需要下載一個(gè)example.mp4的視頻文件。下載進(jìn)程x準(zhǔn)備就緒,終端在系統(tǒng)內(nèi)核中調(diào)用api(下載接口),再通過調(diào)用在系統(tǒng)的libtrans.so以調(diào)用libc.so實(shí)施數(shù)據(jù)下載動(dòng)作。具體的,通過libc.so生成第一文件(臨時(shí)文件).temp,下載進(jìn)程x對(duì).temp寫入關(guān)于程序x的待下載數(shù)據(jù),在待下載數(shù)據(jù)全部寫入.temp之后,將該.temp合成未加密的第一example.mp4(第一應(yīng)用文件),完成下載進(jìn)程。同時(shí),終端在調(diào)用下載接口之后,通過系統(tǒng)注入的libtrans.so以創(chuàng)建加密進(jìn)程e以為截獲下載進(jìn)程x下載指令并開啟新的加密進(jìn)程,用于實(shí)施加密過程。具體的,終端在創(chuàng)建加密進(jìn)程之后創(chuàng)建第二文件,即.bak.temp;當(dāng).temp中有寫入數(shù)據(jù)開始,開始獲取.temp中的數(shù)據(jù)進(jìn)行加密,并將加密后的數(shù)據(jù)寫入.bak.temp中,當(dāng)將.temp寫入數(shù)據(jù)完畢,且沒有未加密的數(shù)據(jù)時(shí),終端將該.bak.temp合成為第二example.mp4(第二應(yīng)用文件),最后,該終端使用第二example.mp4代替第一example.mp4輸出,并結(jié)束加密過程。至此,終端在下載example.mp4的視頻文件的同時(shí)完成了example.mp4的視頻文件的加密。
本發(fā)明實(shí)施例所提供的一種加密方法,通過獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊,該第一文件為下載過程中正在寫入待下載文件的數(shù)據(jù)的臨時(shí)文件,該第i個(gè)數(shù)據(jù)塊為待下載文件中大小不超過第一預(yù)設(shè)范圍的連續(xù)數(shù)據(jù),其中,i≥1; 對(duì)第i個(gè)數(shù)據(jù)塊進(jìn)行加密;將加密后的第i個(gè)數(shù)據(jù)塊寫入第二文件;當(dāng)?shù)谝晃募胁淮嬖谖醇用艿牡趇+1個(gè)數(shù)據(jù)塊時(shí),結(jié)束加密過程。采用上述技術(shù)實(shí)現(xiàn)方案,由于加載文件下載過程中的臨時(shí)文件的數(shù)據(jù)的同時(shí),終端對(duì)臨時(shí)文件中滿足一定數(shù)據(jù)大小且未加密的數(shù)據(jù)塊進(jìn)行加密,直至臨時(shí)文件中加載完待加載文件的數(shù)據(jù),這樣,該終端可以在臨時(shí)文件加載完數(shù)據(jù)后的較短時(shí)間內(nèi),完成了上述數(shù)據(jù)的加密過程,因此,在采用上述方案對(duì)較大文件進(jìn)行加密的過程時(shí),可以顯著地減少加密時(shí)間,從而提高了文件加密的效率。
實(shí)施例三
如圖4所示,本發(fā)明實(shí)施例提供了一種終端1,該終端1可以包括:
獲取單元10,用于獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊,所述第一文件為下載過程中正在寫入待下載文件的數(shù)據(jù)的臨時(shí)文件,所述第i個(gè)數(shù)據(jù)塊為所述待下載文件中大小不超過第一預(yù)設(shè)范圍的連續(xù)數(shù)據(jù),其中,i≥1。
加密單元11,用于對(duì)所述獲取單元10獲取的所述第i個(gè)數(shù)據(jù)塊進(jìn)行加密。
寫入單元12,用于將所述加密單元11加密后的所述第i個(gè)數(shù)據(jù)塊寫入第二文件,所述第二文件為已加密數(shù)據(jù)的存儲(chǔ)文件。
結(jié)束單元13,用于當(dāng)所述獲取單元10獲取的所述第一文件中不存在未加密的第i+1個(gè)數(shù)據(jù)塊時(shí),結(jié)束加密過程。
可選的,如圖5所示,所述終端1還包括:檢測(cè)單元14和生成單元15。
所述生成單元15,用于所述獲取單元10獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊之前,所述檢測(cè)單元14檢測(cè)到下載指令時(shí),生成所述第一文件和所述第二文件。
可選的,所述寫入單元12,還用于所述生成單元17生成所述第一文件之后,所述獲取單元10獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊之前,根據(jù)所述檢測(cè)單元14檢測(cè)的所述下載指令,將所述獲取單元10獲取的所述第i個(gè)數(shù)據(jù)塊從所述待下載文件中寫入所述生成單元15生成的所述第一文件。
可選的,如圖6所示,所述終端1還包括:合成單元16和替換單元17。
所述合成單元16,用于所述寫入單元12根據(jù)所述下載指令,將所述第i 個(gè)數(shù)據(jù)塊從所述待下載文件中寫入所述第一文件之前,當(dāng)所述寫入單元12將所述待下載文件寫入所述生成單元15生成的所述第一文件完成時(shí),將所述第一文件合成為相應(yīng)的第一應(yīng)用文件;以及所述寫入單元12將所述第i個(gè)數(shù)據(jù)塊寫入第二文件之后,所述結(jié)束單元13結(jié)束加密過程之前,當(dāng)所述生成單元15生成的第一文件中不存在未加密的所述第i+1個(gè)數(shù)據(jù)塊時(shí),將所述生成單元15生成的所述第二文件合成為相應(yīng)的第二應(yīng)用文件。
所述替換單元17,用于所述合成單元16將所述生成單元15生成的所述第一文件合成為相應(yīng)的第一應(yīng)用文件,且將所述生成單元15生成的所述第二文件合成為相應(yīng)的第二應(yīng)用文件之后,采用所述合成單元16合成的所述第二應(yīng)用文件代替所述合成單元16合成的所述第一應(yīng)用文件。
可選的,所述加密單元11,具體用于采用動(dòng)態(tài)鏈接庫注入的方法對(duì)所述獲取單元10獲取的所述第i個(gè)數(shù)據(jù)塊進(jìn)行加密。
可選的,本發(fā)明實(shí)施例中的終端可以為移動(dòng)終端,具體的可以為具有文件加載、存儲(chǔ)功能的智能手機(jī)、平板電腦等。
在實(shí)際應(yīng)用中,上述獲取單元10、加密單元11、寫入單元12、結(jié)束單元13、檢測(cè)單元14、生成單元15、合成單元16以及替換單元17可由位于終端1上的處理器實(shí)現(xiàn),具體為中央處理器(cpu)、微處理器(mpu)、數(shù)字信號(hào)處理器(dsp)或現(xiàn)場(chǎng)可編程門陣列(fpga)等實(shí)現(xiàn),該終端1中還可以包括存儲(chǔ)器,具體的,未加密的第i個(gè)數(shù)據(jù)塊及其軟件代碼、已加密的第i個(gè)數(shù)據(jù)塊及其軟件代碼、第一文件及其軟件代碼、第二文件及其軟件代碼、下載指令及其軟件代碼、第一應(yīng)用文件及其軟件代碼,以及第二應(yīng)用文件及其軟件代碼可以保存在存儲(chǔ)器中,該存儲(chǔ)器可以通過系統(tǒng)總線與處理器連接,其中,存儲(chǔ)器用于存儲(chǔ)可執(zhí)行程序代碼,該程序代碼包括計(jì)算機(jī)操作指令,存儲(chǔ)器可能包含高速ram存儲(chǔ)器,也可能還包括非易失性存儲(chǔ)器,例如,至少一個(gè)磁盤存儲(chǔ)器。
本發(fā)明實(shí)施例所提供的一種終端,通過獲取第一文件中的未加密的第i個(gè)數(shù)據(jù)塊,該第一文件為下載過程中正在寫入待下載文件的數(shù)據(jù)的臨時(shí)文件,該第i個(gè)數(shù)據(jù)塊為待下載文件中大小不超過第一預(yù)設(shè)范圍的連續(xù)數(shù)據(jù),其中,i≥1; 對(duì)第i個(gè)數(shù)據(jù)塊進(jìn)行加密;將加密后的第i個(gè)數(shù)據(jù)塊寫入第二文件;當(dāng)?shù)谝晃募胁淮嬖谖醇用艿牡趇+1個(gè)數(shù)據(jù)塊時(shí),結(jié)束加密過程。采用上述技術(shù)實(shí)現(xiàn)方案,由于加載文件下載過程中的臨時(shí)文件的數(shù)據(jù)的同時(shí),終端對(duì)臨時(shí)文件中滿足一定數(shù)據(jù)大小且未加密的數(shù)據(jù)塊進(jìn)行加密,直至臨時(shí)文件中加載完待加載文件的數(shù)據(jù),這樣,該終端可以在臨時(shí)文件加載完數(shù)據(jù)后的較短時(shí)間內(nèi),完成了上述數(shù)據(jù)的加密過程,因此,在采用上述方案對(duì)較大文件進(jìn)行加密的過程時(shí),可以顯著地減少加密時(shí)間,從而提高了文件加密的效率。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用硬件實(shí)施例、軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器和光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。