專利名稱:一種文件加密、解密方法
技術(shù)領(lǐng)域:
本發(fā)明涉及文件加密技術(shù)。
背景技術(shù):
目前,對數(shù)字內(nèi)容的保護(hù),包括商業(yè)或者技術(shù)文件資料、多媒體文件等均采用加密的方 式進(jìn)行。加密一般采用兩大類方式, 一種是基于文件全部數(shù)據(jù)的加密, 一種是針對文件的特 點(diǎn),只對文件的部分?jǐn)?shù)據(jù)內(nèi)容加密。
基于文件全部數(shù)據(jù)的加密,是指不對文件做任何區(qū)分,也不對文件數(shù)據(jù)格式進(jìn)行解析, 將文件全部內(nèi)容進(jìn)行加密,在使用的時(shí)候,直接先將文件進(jìn)行解密,還原成原始文件,或者 將加密文件解密成臨時(shí)文件,然后再使用。顯然,該方式的好處是兼容的格式非常多,可以 處理幾乎任意的文件,處理方式非常簡單,和其它的應(yīng)用軟件等可以沒有任何關(guān)系。但是缺 點(diǎn)也是非常明顯,就是文件在使用前必須先解密,很難做到邊解密邊使用。由于使用前必須 先解密出原始文件,增加了安全的風(fēng)險(xiǎn),同時(shí)原始文件也需要占用內(nèi)容空間,在某些嵌入式 終端中將增加硬件成本。此外,文件先解密再使用,將額外增加解密的時(shí)間。比如,目前的 高清電影,如果采用mpeg2編碼, 一般在幾十G甚至上百G,即使經(jīng)過H264、 MPEG4或者AVS編 碼后的,也在幾個(gè)G以上,如果使用前必須先解密還原原始文件,則必須考慮增加上G的硬件 空間,同時(shí)解密耗時(shí)可能在幾分鐘甚至幾十分鐘,導(dǎo)致用戶體驗(yàn)非常差。目前采用這種方式 加密文件的情況還非常多,比如0MA DRM的DCF格式、部分商用的文件加密系統(tǒng)等等。
針對文件特點(diǎn),對部分?jǐn)?shù)據(jù)格式加密的方法,則是對首先對具體文件的數(shù)據(jù)內(nèi)容進(jìn)行分 析,然后選擇性的進(jìn)行加密。比如對于MP4文件,該類文件的格式使用的是國際標(biāo)準(zhǔn) IS014496-12多媒體文件格式,具體文件結(jié)構(gòu)包括ftyp部分、moov部分、moof部分、mdat部 分、free部分、skip部分。則在0MA DRM標(biāo)準(zhǔn)中則只對mdat部分的數(shù)據(jù)進(jìn)行了加密,還可以 對文件繼續(xù)進(jìn)行更細(xì)的解析,可以只對M00V box中的幀數(shù)據(jù)進(jìn)行加密。這樣不改變文件的結(jié) 構(gòu),可以在使用的時(shí)候邊解密邊使用。此外,對于電子文檔,按照ebook的標(biāo)準(zhǔn),則可以選 擇將電子文檔的說明信息、格式信息排除不處理,然后只對文件中實(shí)質(zhì)封裝的數(shù)據(jù)內(nèi)容進(jìn)行 加密。顯然,這樣作的優(yōu)點(diǎn)就是不需要對文件進(jìn)行事先解密,可以節(jié)約空間和處理的時(shí)間, 帶來好的用戶體驗(yàn)。但是缺點(diǎn)也很明顯,軟件工作量非常大。目前正在使用的文件格式成百 上千種,如果要作到對一種文件格式的兼容,則必須全部清楚該類型文件的結(jié)構(gòu),了解數(shù)據(jù)
4的封裝格式和敏感信息的位置,對關(guān)鍵數(shù)據(jù)進(jìn)行加密處理,這樣作非常麻煩,只能選擇部分 格式進(jìn)行兼容。此外,有的文件格式出于商業(yè)利益或者技術(shù)保密的理由,可能為某些公司的 私有格式,外界無法知道該格式的詳細(xì)情況,根本無法作到兼容。
關(guān)于文件加密方面,目前已經(jīng)有很多該方面的技術(shù),但是大部分內(nèi)容都是大的框架,即 采用什么加密、采用什么架構(gòu),很少有描述到底如何處理具體的文件的,操作性或者兼容性 比較差,強(qiáng)調(diào)安全,忽視了用戶體驗(yàn)。中國公開號CN 1567255A提出了一種安全文件系統(tǒng)的 存儲(chǔ)和訪問控制方法,該方法提出根據(jù)不同的安全級別要求,對存儲(chǔ)的文件采用不同的加密 方法和機(jī)密強(qiáng)度進(jìn)行處理,同時(shí)引入數(shù)字簽名技術(shù)對文件進(jìn)行簽名,防止文件的被篡改,同 時(shí)進(jìn)行身份控制和訪問控制。CN1567288 A提出了一種多重文件同時(shí)封存/開封的方法,該發(fā) 明主要采用非對稱加密的算法對文件進(jìn)行嵌套加密,解密時(shí),需要所有加密的密鑰依次進(jìn)行 解密。CN 1567814A則提出了一種在歸屬寄存器中實(shí)現(xiàn)明文許可文件的方法,該方法主要是 通過包含一加密信息的明文許可文件,加載工具在加載文件時(shí),對加密文件的特定部分解密 ,然后與明文進(jìn)行對比,如果相同則加載該文件。此方法主要用于在加載加密模塊前,判斷 加密模塊的合法,本身并不是針對如何進(jìn)行加密。
以上方式都沒有解決文件格式和使用體驗(yàn)的問題。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是,提供一種基于基本加密單元的文件加密、解密方法。 本發(fā)明為解決上述技術(shù)問題所采用的技術(shù)方案是, 一種文件加密方法,包括以下步驟
a、 加密方確定加密算法;
b、 加密方根據(jù)加密算法確基本加密單元的長度;
c、 加密方將文件從文件起始地址開始,以基本加密單元的長度將文件劃分為多個(gè)數(shù)據(jù)
包;
d、 加密方按照順序?qū)?shù)據(jù)包進(jìn)行加密;
e、 加密方判斷當(dāng)前數(shù)據(jù)包是否為最后一個(gè)數(shù)據(jù)包,如是,進(jìn)入步驟f;如否,回到步驟
d;
f、 加密方進(jìn)行數(shù)據(jù)填充,填充后的文件長度為基本加密單元的整數(shù)倍,對填充的數(shù)據(jù) 進(jìn)行加密。
進(jìn)一步的,步驟f后還包括步驟g,步驟g為加密方添加文件說明信息,對文件進(jìn)行封裝 ;或加密方將文件說明信息加密后發(fā)送至解密方;所述文件說明信息包括加密算法、基本加 密單元的長度。
5所述文件說明信息包括加密算法、基本加密單元的長度。
進(jìn)一步的,為保證文件的數(shù)據(jù)完整性,在步驟f之后、步驟g之前還對文件進(jìn)行數(shù)字簽名 操作;步驟g中所述文件說明信息中還包括數(shù)字簽名信息。
具體的,步驟f中以填充的字節(jié)數(shù)作為填充的值。進(jìn)行數(shù)據(jù)填充的具體步驟為如最后 一個(gè)數(shù)據(jù)包的長度為一個(gè)基本加密單元的長度,則增加一個(gè)基本加密單元;否則,直接對該 數(shù)據(jù)包進(jìn)行填充,使填充后的數(shù)據(jù)包的長度為一個(gè)基本加密單元的長度。
另,根據(jù)上述文件加密方法,本發(fā)明還提供針對該文件加密方法的文件解密方法,包括 以下步驟
a、 解密方通過解析文件說明信息得到加密算法、基本加密單元;
b、 解密方根據(jù)加密算法、基本加密單元的長度確定解密算法、基本解密單元的長度;
c、 解密方根據(jù)基本解密單元的長度確定每一次讀取的數(shù)據(jù)長度,對加密數(shù)據(jù)包進(jìn)行解 密并返回解密后的數(shù)據(jù)包;所述每一次讀取的數(shù)據(jù)長度為基本解密單元的長度的整數(shù)倍;
d、 解密方完成最后一個(gè)數(shù)據(jù)包解密后,刪除填充數(shù)據(jù)。
進(jìn)一步的,在加密過程中為保證文件的數(shù)據(jù)完整性,那么相應(yīng)的解密過程的步驟a中還 包括,根據(jù)文件說明信息中的數(shù)字簽名信息對穩(wěn)健性進(jìn)行數(shù)字簽名驗(yàn)證的步驟。
步驟c中,在讀取數(shù)據(jù)時(shí),對于需要讀取的加密數(shù)據(jù)包的相對起始地址不是基本加密單 元的整數(shù)倍時(shí),則需要向前調(diào)整到相對起始地址剛好為基本解密單元整數(shù)倍處。
本發(fā)明的有益效果是,能實(shí)現(xiàn)對任意格式文件的可以加密,同時(shí)也可以實(shí)現(xiàn)對文件的邊 解密邊使用。本發(fā)明應(yīng)用在辦公系統(tǒng)中,可防止技術(shù)秘密、商業(yè)秘密以及其它文件的安全, 并且不影響用戶的使用;應(yīng)用在數(shù)字媒體的內(nèi)容保護(hù)中,可達(dá)到對任意媒體文件的保護(hù)并且 實(shí)現(xiàn)邊解密邊使用,不需要全部解密后再使用,可以有效節(jié)省硬件開支,提高處理速度。
下面結(jié)合附圖和具體實(shí)施例對本發(fā)明作進(jìn)一步詳細(xì)的描述。 圖l為文件加密過程; 圖2為文件解密過程。
具體實(shí)施例方式
本發(fā)明只需要對讀取文件的函數(shù)模塊進(jìn)行少量修改重載就可以實(shí)現(xiàn),非常簡單。本文著 重?cái)?shù)據(jù)解密處理和如何解密,對于加密過程中密鑰的傳送,已經(jīng)有非常多的方法,本文不作描 述。下面對整個(gè)實(shí)現(xiàn)過程進(jìn)行詳細(xì)的說明。
6文件的加密過程,如圖l,具體流程如下
(1) 確定加密算法由于本方案擬將文件分為多個(gè)數(shù)據(jù)包,然后進(jìn)行加密處理,因此 適合采用分組加密的算法,比如AES、 DES、 3DES、 SMS4等算法,對于流密碼算法,必須對 其進(jìn)行一定的處理,形成基本的加密單元后才可以使用;
(2) 確定基本加密單元的長度基本加密數(shù)據(jù)長度的確定,與加密算法有關(guān)。例如, AES、 SMS4加密算法的基本長度是16個(gè)字節(jié),而DES、 3DES加密算法的基本長度為8個(gè)字節(jié)。 也可以采用加密算法的基本長度的整數(shù)倍作為基本加密單元的長度,采用結(jié)合機(jī)密算法與可 選的加密模式進(jìn)行加密,如CTR模式、CBC模式等;
(3) 加密加密算法和加密長度確定后,即可以開始以基本加密單元為單位,讀取數(shù) 據(jù)進(jìn)行加密處理。原則上,為了使用的方便,加密后的數(shù)據(jù)和加密前的數(shù)據(jù)長度應(yīng)該保持一
致,即基本加密單元的長度與基本解密單元的長度一致;也可以不一致,但將增加后續(xù)解密
時(shí)地址定位的運(yùn)算量。 一個(gè)數(shù)據(jù)包加密完成后,寫入新的文件中或者寫回到原始文件的原始
位置。繼續(xù)執(zhí)行(4);
(4) 確定當(dāng)前數(shù)據(jù)包是否最后一個(gè)數(shù)據(jù)包以基本加密單元為度量單位,判斷需要加 密的數(shù)據(jù)包是否為最后一個(gè)數(shù)據(jù)包。如果不是,執(zhí)行(3),繼續(xù)加密;如果是,則執(zhí)行(5 );
(5) 數(shù)據(jù)填充數(shù)據(jù)填充一般可以采用填充的字節(jié)數(shù)作為填充的值。如待加密的數(shù)據(jù) 包恰好是一個(gè)基本加密單元,則增加一個(gè)基本加密單元的數(shù)據(jù)即可,該增加的基本加密單元 中所有的字節(jié)的內(nèi)容均是該單元的長度。例如,基本加密單元的長度為16,而最后一個(gè)數(shù)據(jù) 包剛好是16個(gè)字節(jié),則再增加16個(gè)字節(jié)的長度,增加的16個(gè)字節(jié)每個(gè)字節(jié)的值均為0x0f(十 進(jìn)制為16)。如最后一個(gè)數(shù)據(jù)包中的數(shù)據(jù)小于一個(gè)基本加密單元,則直接對其進(jìn)行填充,使 其長度剛好為一個(gè)基本加密單元。例如,加密基本單元長度為16,而待加密的數(shù)據(jù)只有5個(gè)
,則需要填充ll個(gè)數(shù)據(jù),使用ll作為值,對尾部增加的ll個(gè)字節(jié)進(jìn)行填充,使其剛好為16個(gè) 字節(jié);
(6) 剩余數(shù)據(jù)的加密對填充的數(shù)據(jù)進(jìn)行加密;
(7) 數(shù)據(jù)簽名如果需要保證數(shù)據(jù)的完成性,可選對整個(gè)文件進(jìn)行數(shù)字簽名操作,形 成簽名數(shù)據(jù);
(8) 信息封裝將加密算法、加密基本單元長度、簽名數(shù)據(jù)等相關(guān)信息組成文件說明 信息,將文件說明信息合并到文件頭部或者尾部。出于安全的考慮,文件裝于文件中,而通過其它的方式告知解密方。
加密文件的解密過程,如圖2,具體流程如下
(1) 讀數(shù)據(jù)請求應(yīng)用程序需要讀取文件內(nèi)容,發(fā)出讀取數(shù)據(jù)請求;
(2) 解析文件說明信息程序首先解析文件說明信息,該部分信息可能在文件頭部, 也可能在文件尾部;
(3) 簽名驗(yàn)證首先解析出數(shù)字簽名,并對文件進(jìn)行數(shù)字簽名的驗(yàn)證;
(4) 解析解密算法從文件說明信息中,確定采用什么加密算法,從而確定采用什么解 密算法;
(5) 確定基本解密單元的長度基本解密單元的長度在加密結(jié)束時(shí)封裝在文件說明信 息中;基本解密單元的長度可根據(jù)基本加密單元的長度確定的,或者是根據(jù)加密算法確定;
(6) 讀地址轉(zhuǎn)換加密后的文件的數(shù)據(jù)的地址,和原始文件有了微小的變化,因此需要 進(jìn)行一定的轉(zhuǎn)換。比如,原來的數(shù)據(jù)地址是在0x0008,由于添加了在文件頭部增加了文件說明 信息,假設(shè)該部分長度為0x0034,則現(xiàn)在應(yīng)該讀取的數(shù)據(jù)地址為0x0008+0x0034^x003C;
(7) 確定數(shù)據(jù)包加密地址由于讀取數(shù)據(jù)的地址,相對于加密數(shù)據(jù)的起始位置,不一定 是剛好是加密單元的邊界起始點(diǎn),因此需要進(jìn)行起始位置的調(diào)整。假設(shè)加密數(shù)據(jù)的起始地址 為0x0034,數(shù)據(jù)長度為0x0086-0x0034^x0052,十進(jìn)制為82,如果加密基本單元的長度為16,則 81不是16的整數(shù)倍,將其讀取數(shù)據(jù)的范圍微量擴(kuò)大,將讀取開始指針向前調(diào)2個(gè)地址,為 0x0084,則數(shù)據(jù)長度為0x0084-0x0034=0x0050,十進(jìn)制為80,剛好為16的整數(shù)倍;
(8) 確定數(shù)據(jù)包解密結(jié)束地址或者實(shí)際讀取長度由于讀取數(shù)據(jù)的長度也不一定剛好 是基本解密單元的整數(shù)倍,則同樣將讀取數(shù)據(jù)的長度進(jìn)行微量擴(kuò)張,使數(shù)據(jù)結(jié)束的地址恰好在 解密基本單元整數(shù)倍之前一個(gè)地址。讀取長度最后需要加上步驟(7)所增加的數(shù)據(jù)長度;
(9) 讀取需解密數(shù)據(jù)按照步驟(7)、 (8)確定的數(shù)據(jù)地址、數(shù)據(jù)長度,讀取需要解 密的數(shù)據(jù)包;
(10) 解密解密數(shù)據(jù)包;
(11) 返回解密后的數(shù)據(jù)根據(jù)應(yīng)用程序的讀取請求,從解析的數(shù)據(jù)包中返回應(yīng)用程序 需要的數(shù)據(jù),由于解密的數(shù)據(jù)包的數(shù)據(jù)可能大于程序需要的數(shù)據(jù),需要根據(jù)步驟(7) 、 (8 )的變動(dòng),返回變動(dòng)前地址數(shù)據(jù)內(nèi)容,刪除不需要的數(shù)據(jù);
(12) 解密至最后一個(gè)數(shù)據(jù)包,則需要在解密后去除填充數(shù)據(jù),需要去掉的字節(jié)數(shù)就是 解密數(shù)據(jù)最后字節(jié)表示的值。
權(quán)利要求
權(quán)利要求1一種文件加密方法,其特征在于,包括以下步驟a、加密方確定加密算法;b、加密方根據(jù)加密算法確基本加密單元的長度;c、加密方以基本加密單元的長度將文件劃分為多個(gè)數(shù)據(jù)包;d、加密方按照順序?qū)?shù)據(jù)包進(jìn)行加密;e、加密方判斷當(dāng)前數(shù)據(jù)包是否為最后一個(gè)數(shù)據(jù)包,如是,進(jìn)入步驟f;如否,回到步驟d;f、加密方進(jìn)行數(shù)據(jù)填充,填充后的文件長度為基本加密單元的整數(shù)倍,對填充的數(shù)據(jù)進(jìn)行加密。
2.如權(quán)利要求l所述一種文件加密方法,其特征在于,步驟f后還包括步驟gl;gl、加密方在文件中添加文件說明信息,再對文件進(jìn)行封裝;所述文件說明信息包括 加密算法、基本加密單元的長度。
3.如權(quán)利要求2所述一種文件加密方法,其特征在于,在步驟f之后 、步驟gl之前還對文件進(jìn)行數(shù)字簽名操作;步驟gl中所述文件說明信息中還包括數(shù)字簽名信 息。
4.如權(quán)利要求l所述一種文件加密方法,其特征在于,步驟f后還包括步驟g2;g2、加密方將文件說明信息加密后發(fā)送至解密方;所述文件說明信息包括加密算法、 基本加密單元的長度。
5.如權(quán)利要求4所述一種文件加密方法,其特征在于,在步驟f之后 、步驟g2之前還對文件進(jìn)行數(shù)字簽名操作;步驟g2中所述文件說明信息中還包括數(shù)字簽名信 息。
6.如權(quán)利要求l所述一種文件加密方法,其特征在于,步驟f中以填充的字節(jié)數(shù)作為填充的值。
7.如權(quán)利要求6所述一種文件加密方法,其特征在于,步驟f中進(jìn)行 數(shù)據(jù)填充的具體步驟為如最后一個(gè)數(shù)據(jù)包的長度為一個(gè)基本加密單元的長度,則增加一個(gè) 基本加密單元;否則,直接對該數(shù)據(jù)包進(jìn)行填充,使填充后的數(shù)據(jù)包的長度為一個(gè)基本加密 單元的長度。
8. 一種文件解密方法,其特征在于,包括以下步驟a、 解密方通過解析文件說明信息得到加密算法、基本加密單元;b、 解密方根據(jù)加密算法、基本加密單元的長度確定解密算法、基本解密單元的長度;c、 解密方根據(jù)基本解密單元的長度確定每一次讀取的數(shù)據(jù)長度,對加密數(shù)據(jù)包進(jìn)行解 密并返回解密后的數(shù)據(jù)包;所述每一次讀取的數(shù)據(jù)長度為基本解密單元的長度的整數(shù)倍;d、 解密方完成最后一個(gè)數(shù)據(jù)包解密后,刪除填充數(shù)據(jù)。
9.如權(quán)利要求8所述一種文件解密方法,其特征在于,步驟a中還包 括,根據(jù)文件說明信息中的數(shù)字簽名信息對穩(wěn)健性進(jìn)行數(shù)字簽名驗(yàn)證的步驟。
10.如權(quán)利要求9所述一種文件解密方法,其特征在于,步驟c中,在 讀取數(shù)據(jù)時(shí),如需要讀取的加密數(shù)據(jù)包的相對起始地址不是基本加密單元的整數(shù)倍,則需要 向前調(diào)整到相對起始地址剛好為基本解密單元整數(shù)倍處。
全文摘要
本發(fā)明涉及文件加密技術(shù)。本發(fā)明提供一種基于基本加密單元的文件加密、解密方法。一種文件加密方法,包括以下步驟加密方以基本加密單元的長度將文件劃分為多個(gè)數(shù)據(jù)包;對數(shù)據(jù)包進(jìn)行加密;加密至最后一個(gè)數(shù)據(jù)包則進(jìn)行數(shù)據(jù)填充,再對填充的數(shù)據(jù)進(jìn)行加密。文件解密方法,包括以下步驟a.解密方根據(jù)加密算法、基本加密單元的長度確定解密算法、基本解密單元的長度;b.解密方根據(jù)基本解密單元的長度確定每一次讀取的數(shù)據(jù)長度,對加密數(shù)據(jù)包進(jìn)行解密并返回解密后的數(shù)據(jù)包;完成最后一個(gè)數(shù)據(jù)包解密后,刪除填充數(shù)據(jù)。本發(fā)明能實(shí)現(xiàn)對任意格式文件的可以加密,同時(shí)也可以實(shí)現(xiàn)對文件的邊解密邊使用,可應(yīng)用在辦公系統(tǒng),數(shù)字媒體的內(nèi)容保護(hù)中。
文檔編號H04L9/32GK101488860SQ200910300490
公開日2009年7月22日 申請日期2009年2月20日 優(yōu)先權(quán)日2009年2月20日
發(fā)明者劉賢洪 申請人:四川長虹電器股份有限公司