基于一維混沌映射的文件加密算法設(shè)計(jì)與實(shí)現(xiàn)

目前,對(duì)文件加密主要有身份驗(yàn)證式密碼加密和文件內(nèi)容加密兩種方式,前者容易被破解,后者相對(duì)比較安全。針對(duì)目前的加密方法“防頻度統(tǒng)計(jì)法”破解能力較弱的特點(diǎn),基于L0gistic混沌映射,我們提出了密鑰以明文的不同而不同的隨機(jī)生成法和加密算法的隨機(jī)調(diào)用技術(shù),從而提高了文件加密的可靠性。

一、數(shù)據(jù)加密的原理

所謂加密就是把有序的可理解的數(shù)據(jù)變換成無(wú)序的不可理解的數(shù)據(jù),從而提高其在使用、保存和傳送等環(huán)節(jié)上的安全性的過(guò)程。保密通信機(jī)理如圖1所示。

基于一維混沌映射的文件加密算法設(shè)計(jì)與實(shí)現(xiàn)

加密過(guò)程可表示為:C= Ek( M);解密過(guò)程可表示為:M= Dk(C)。M為明文;K為密鑰;C為通過(guò)加密后的密文;E,D分別為加密算法和解密算法。

二、文件加密、解密的原理

從本質(zhì)上來(lái)說(shuō),計(jì)算機(jī)中的文件可以看成是從文件頭到文件尾的字節(jié)的集合.無(wú)論是DOS下的文件還是WINDOWS下的文件;無(wú)論是有文件頭的文件還是沒(méi)有文件頭的;無(wú)論是可執(zhí)行文件還是非可執(zhí)行文件,都可以只是將它們看成字節(jié)流。要對(duì)文件加密,使得加密后的文件面目全非,其實(shí)就是要將文件的每個(gè)字節(jié)看成明文,然后用特定的密鑰在加密算法的作用下將明文處理成密文。這樣被加密后的文件的內(nèi)容被破壞,不能正常使用,達(dá)到了加密的效果。

對(duì)文件加密和解密的示意圖如圖2所示。

基于一維混沌映射的文件加密算法設(shè)計(jì)與實(shí)現(xiàn)

三、混沌映射原理

混沌映射具有很好的性質(zhì),即非常相近的初始條件在進(jìn)行了一定次數(shù)的迭代以后會(huì)生成兩個(gè)截然不同的序列;不可由序列的本身預(yù)測(cè)將產(chǎn)生的下一個(gè)數(shù)值;而且生成的序列具有白噪聲性,即等概率地分布在值域上。由于這些良好的性質(zhì),它非常適合于文件加密。

L0gistic迭代公式如下:

基于一維混沌映射的文件加密算法設(shè)計(jì)與實(shí)現(xiàn)

其中,參數(shù)a∈(0,4);X(n)∈(O,1),n=0,1,2,…。

由該映射產(chǎn)生的序列將呈現(xiàn)出混沌態(tài)。由于要將構(gòu)成文件的一個(gè)一個(gè)字節(jié)加密,所以對(duì)生成的實(shí)數(shù)的集合{X(n)}還要處理成由整數(shù)構(gòu)成的偽隨機(jī)序列,從而用這些數(shù)做加密密鑰或者加密算法的隨機(jī)選擇數(shù)。

四、基于混沌映射的多隨機(jī)性文件加密算法

1、文件加密的要求

1)能對(duì)基于DOS和WINDOWS的文件加密。

2)對(duì)同一個(gè)文件,每次加密時(shí),輸入的密碼不同,則采用不同的加密算法來(lái)加密。

3)對(duì)構(gòu)成文件的一個(gè)一個(gè)字節(jié)加密時(shí),要求密鑰不同,從而避免被“頻度統(tǒng)計(jì)法”解密。

4)要區(qū)分加密,對(duì)有文件頭的,只加密前100個(gè)字節(jié);對(duì)沒(méi)有文件頭的數(shù)據(jù)文件,全文加密。

2、常用加密算法

對(duì)字節(jié)流的加密和解密其實(shí)就是有規(guī)律地破壞和恢復(fù)數(shù)據(jù),為了實(shí)現(xiàn)多種加密方法的隨機(jī)調(diào)用,特設(shè)計(jì)如下幾種加密方法。

1)加減法

將每個(gè)字節(jié)看成(0~255)之間的一個(gè)數(shù),加密時(shí)將每個(gè)字節(jié)加M,解密時(shí)將每個(gè)字節(jié)減M,當(dāng)然要考慮不能溢出。

2)求反法

將每個(gè)字節(jié)求反。變成其反碼。

3)移位法

將每個(gè)字節(jié)循環(huán)左移M位。

4)替代法

將(0~255)這256個(gè)數(shù)構(gòu)造一個(gè)換碼表,形成一一對(duì)應(yīng)的關(guān)系,加密時(shí)換碼,解密時(shí)反換碼。

5)異或法

將每個(gè)字節(jié)跟一個(gè)特定的字節(jié)M異或,解密時(shí),再跟M異或就還原了。

6)錯(cuò)序文件頭法

對(duì)于只加密文件頭的情況,只要破壞了文件頭中各字節(jié)的排列順序,其結(jié)構(gòu)就被破壞,從而達(dá)到加密的目的。如將奇偶字節(jié)交換位置。

3、加密方法的隨機(jī)性實(shí)現(xiàn)

為了防止別人用“頻度統(tǒng)計(jì)”的方法解密被加密的文件,對(duì)文件加密時(shí),加密算法要隨機(jī)調(diào)用。

本文基于L0gistic迭代公式混沌映射機(jī)制,加密算法的隨機(jī)調(diào)用的思想為:

1)由用戶輸入的密碼生成實(shí)數(shù)a和X(0);

2)利用公式迭代1 00次,求得X (IOO);

3)求得X (IOO)的小數(shù)點(diǎn)后的4,5,6位組成的整數(shù)Y;

4) Z=Y mc)cl 6,即將Y對(duì)6取余數(shù),得到小于6的整數(shù)Z;

5)Z就是所求得的用以選擇加密算法的偽隨機(jī)數(shù),0對(duì)應(yīng)算法1;1對(duì)應(yīng)算法2;依次類推。

4、密鑰的隨機(jī)性實(shí)現(xiàn)

密碼和密鑰是不同的,密碼是用戶對(duì)文件加密和解密的一個(gè)保密的字符串;密鑰是由密碼生成的一個(gè)在對(duì)明文加密過(guò)程中起作用的字符串。

假設(shè)對(duì)一個(gè)含文件頭的文件加密,只加密前100個(gè)字節(jié),要采用異或的方法加密。

為了防止有人對(duì)加密后的文件內(nèi)容按照“頻度統(tǒng)計(jì)法”解密,對(duì)每個(gè)字節(jié)加密的密鑰字符應(yīng)該不同,為此采用了基于L0gistic混沌影射的密鑰生成方法:

1)由用戶輸入的密碼生成實(shí)數(shù)a和X(0);

2)利用公式迭代2000次求得X (2000);

3)求得X( 2000)的小數(shù)點(diǎn)后的4,5,6位組成的整數(shù)Y;

4) Z=Y mc)cl 256,即將Y對(duì)256取余數(shù),得到小于255的整數(shù)Z;

5)Z就是所求得的對(duì)第一個(gè)字節(jié)進(jìn)行異或加密的密鑰;

6)對(duì)X( 2000)再迭代5次,繼續(xù)3,4步求得的Z就是對(duì)第二個(gè)字節(jié)進(jìn)行異或的密鑰;

7)對(duì)X( 2005)再迭代5次,繼續(xù)3,4步求得的Z就是對(duì)第三個(gè)字節(jié)進(jìn)行異或的密鑰;

8)依次類推。

這樣對(duì)100個(gè)字節(jié)雖然都是采用異或的方法加密,但是因?yàn)槊總€(gè)字節(jié)的密鑰是各不相同的,所以加密后的密文沒(méi)有規(guī)律可言,基本上不可能被解密。

5、密鑰的傳遞

由于采用了對(duì)稱加密機(jī)制,即加密和解密的密碼是相同的,那么解密的時(shí)候必須知道加密時(shí)候的密碼,只有密碼正確才能解密。為此必須將加密時(shí)的密碼(當(dāng)然要做簡(jiǎn)單加密,防止別人用16進(jìn)制工具查看文件中的字符串)保存在某個(gè)地方,以便解密時(shí),將輸入的解密密碼和加密密碼對(duì)比。

本文將處理過(guò)的密碼加到被加密文件的尾部,又因?yàn)椴荒軐⑽醇用艿奈募e(cuò)誤解密,所以在被加密文件的尾部還增加了加密標(biāo)志“#JIAMI#’’,形成了被加密文件的特定文件尾結(jié)構(gòu),如圖3所示。

基于一維混沌映射的文件加密算法設(shè)計(jì)與實(shí)現(xiàn)

這樣,每個(gè)被加密的文件處理后的密碼和加密標(biāo)志都追加到了尾部,解密時(shí),只有判斷出是被加密的文件并且用戶輸入的密碼正確才解密,從而保證了解密程序不會(huì)因誤操作而破壞那些沒(méi)有加密的文件。

6、具體實(shí)現(xiàn)

本文件加密解密軟件采用了VB編制,界面簡(jiǎn)潔友好,能實(shí)現(xiàn)各種文件的加密和解密,并且加密和解密的速度適中,能滿足用戶要求。加密后的文件,有文件頭的不能再被相應(yīng)的應(yīng)用程序打開(kāi);沒(méi)有文件頭的純數(shù)據(jù)文件被打開(kāi)后都是亂碼。達(dá)到了加密的目的。

小知識(shí)之字節(jié)流字節(jié)流(byte stream)是一種比特流,不過(guò)里面的比特被打包成一個(gè)個(gè)我們叫做字節(jié)(Bytes)的單位。