【正文】
而且,在對已知算法進行分析、總結(jié)的基礎(chǔ)上,針對不同的具體密碼算法以及不同的應(yīng)用環(huán)境選擇相應(yīng)適宜的策略,使用較為復(fù)雜的混合遺傳算法或并行遺傳算法,再結(jié)合其它優(yōu)秀的隨機優(yōu)化算法,如模擬退火算法、禁忌搜索算法等,將可以對更復(fù)雜的密碼算法如SDES算法、Vernam密碼等進行有效的分析[17]。由于受實際條件等諸多限制,程序方面還不夠完善。本文是基于遺傳算法作為一種密碼分析的方法,實現(xiàn)了通過遺傳算法對密鑰進行編碼從而產(chǎn)生群體,然后對密文解密,并不斷根據(jù)適應(yīng)度計算,使種群不斷的進化,最后獲得接近于甚至是正真的密鑰。表54變變異概率的密鑰匹配率變異概率密鑰J K H Z C G O D I B T U W E N Q X R Y M S A P L F V匹配率J A H Z C G O D I X T U W E N Q B R Y M S K P L F V%J K H Z C G O D E X T U W I N Q B R Y M S A P L F V%J K H Z C G O D I B X U W M N Q V R E Y S A P L F T%J K H Z C G O D E B T U W I N Q X R Y M S A P L F V%由表54可說明變異概率的大小對取得最優(yōu)密鑰關(guān)系有一定的影響。若是別的參數(shù)均不變,運行程序后可獲得最優(yōu)密鑰為J K H Z C G O D I B X U W M N Q V R E Y S A P L F T,經(jīng)此密鑰解密得到明文:NHE CAPACINANED VEHICLE ROUNISG PROBLEM CVRP IT OSE CLATT……,但并不影響其可讀性。若是別的參數(shù)均不變,得到最優(yōu)密鑰J K H Z C G O D E B T U W I N Q X R Y M S A P L F V,經(jīng)此密鑰獲得明文為:THE CAPACNTATED VEHNCLE ROUTNIG PROBLEM CVRP NS OIE CLASS……這段密文也不可讀。若是別的參數(shù)均不變,運行程序后可獲得最優(yōu)密鑰為M S H R C G K D Y B P U W I N Q X Z E J F A O L T V,經(jīng)此密鑰解密得到明文:AHE CTPTCNATAER VEHNCLE DOBANSW PDOGLEM CVDP NI OSE CLTII……這段明文基本上不可讀了。也就是說進化到1000代時種群已經(jīng)達到了最優(yōu)。若是別的參數(shù)均不變,而把種群進化代數(shù)設(shè)定為500代時,由此獲得的最優(yōu)密鑰為J A H W C G O D I B T U Z E N Q X R Y M S K P L F V,經(jīng)此解密的銘文為:THE CAPACITATEM BEHICLE ROUTING PROVLED CBRP IS ONE CLASS……這段明文雖然也基本可讀,但是錯誤率比進化1000代時要稍高點。若把種群大小設(shè)定為50呢?運行后得到最優(yōu)密鑰為J Q R W C K S H N L X U A I E Z B D Y M G O F T P V,經(jīng)此解密的明文為:TRE HABAHNTATEP MERNHLE CIGTNOV BCIFLED HMCB NS IOE HLASS IU MCB AOP……這段明文基本上是不可讀了。這就說明以上得到的最優(yōu)密鑰已經(jīng)很接近正確的密鑰了。先期工作要對得到明文進行加密:明文為:the capacitated vehicle routing problem cvrp is one class……(見附錄一)隨機產(chǎn)生的密鑰為:J K H Z C G O D I B T U W E N Q X R Y M S A P L F V經(jīng)加密得到密文為:MDC HJQJHIMJMCZ ACDIHUC RNSMIEO QRNKUCW HARQ IY NEC HUJYY NG ARQ JEZ HJE……(見附錄二)開始數(shù)據(jù)分析就要對以上密文進行解密,而解密就需要通過遺傳算法,下面就分如下幾個部分對算法數(shù)據(jù)進行分析:(1)群體大小的設(shè)定(2)種群進化代數(shù)的設(shè)定(3)交叉概率的設(shè)定(4)變異概率的設(shè)定首先把種群大小設(shè)定為200,種群進化代數(shù)為1000代。}其中ciphertext指密文,plaintext指明文,base定義了按順序從A到Z的26個字母??紤]到編碼串是用0到25的數(shù)字表示,所以用base數(shù)組進行轉(zhuǎn)換。 }本文經(jīng)過以上操作就得到了新的群體,這個新的群體又需要進一步的選擇、交叉和變異才能不斷的進化,最終得到最優(yōu)密鑰。 newpop[k5].cipher[j2]=newpop[k5].cipher[j1]。 }while(j1==j2)。 if(mutate) { j1=rand()%lchrom。首先,根據(jù)給定的變異概率Pm與字符出現(xiàn)的頻率,選擇個體中需要進行變異的字符,在這里不能簡單地將該字符替換為別的字符,而是在同一個個體內(nèi)選擇另一個字符與之進行交換。 }部分匹配交叉會產(chǎn)生重復(fù),本文中若是產(chǎn)生了重復(fù),則重新開始交叉,直到不重復(fù)。j++){ newpop[k5].cipher[j]=ts2[j]。for(j=jcross1。 newpop[k5].cipher[j]=ts1[j2]。j2=jcross2。jlchrom。 } }二、交叉點之后編碼處理:同一類似。j2++) {if(newpop[k5].cipher[j]!=ts2[j2]) continue。j++) { for(j2=jcross1。代碼如下: for(j=0。比較數(shù)組ts1和數(shù)組ts2中的元素,如果是兩者相同,則不用交叉,直接遺傳到下一代;否則,進行部分比配交叉。接著在這兩個密鑰中隨機產(chǎn)生兩個不同的交叉點jcross1和jcross2,然后對這兩個交叉點進行排序,賦值給jcross1為第一個交叉點,jcross2為第二個交叉點。但是由于替換密碼的密鑰表是沒有重復(fù)字符的,所以交叉操作也必須要保證兩個子代個體的參數(shù)中字符的非重復(fù)性,這就需要在選擇出兩個父代個體后,對它們進行重復(fù)性檢查。 return (j1)。amp。 j=j+1。 rand1=random1()*sumfitness。 partsum=。選擇代碼如下:int select(){ double rand1,partsum。本文中還采用了最優(yōu)保存策略即上一代群體中最優(yōu)密鑰的適應(yīng)度若是大于本代群體中最差密鑰的適應(yīng)度,則上一代的最優(yōu)密鑰取代本代最差密鑰。然后對文中的每個字母出現(xiàn)的次數(shù)進行統(tǒng)計;最后兩者相除就可以算出DF(i)。本文正是基于英文字符的統(tǒng)計特性,可以選取如下適應(yīng)度函數(shù):式中:SF(i)為第i個字符在正常的英文使用中出現(xiàn)的頻率,DF(i)是經(jīng)過對密文C進行解密運算后得到的明文M=(m0,m1,m2,…,mn1),對mi出現(xiàn)的頻率進行統(tǒng)計計算的結(jié)果。而且,雙字母(相鄰的兩個字母)和三字母(相鄰的三個字母)也和單字母一樣出現(xiàn)相當(dāng)穩(wěn)定的字母分布[16]。若統(tǒng)計的英文篇幅足夠長時,會發(fā)現(xiàn)各個英文字母的頻率相當(dāng)穩(wěn)定。從大量的英文書籍、報刊的文章中會很容易發(fā)現(xiàn)英文字母出現(xiàn)的頻率有許多統(tǒng)計規(guī)律可循。在遺傳算法當(dāng)中,適應(yīng)度函數(shù)一般是由待求問題的目標(biāo)函數(shù)轉(zhuǎn)換而成的。}這就實現(xiàn)了對本文中密鑰的編碼。 check[flag]=true。 if(check[flag]==false) { tempcipher[i]=flag。ilchrom。i++) check[i]=false。設(shè)計代碼如下:for (i=0。常量與變量說明:maxpop 表示最大群體大小MAXSTRING 表示最大字符串長度lchrom 表示個體長度popsize 表示種群規(guī)模maxgen 表示最大運行代數(shù)pcross 表示交叉概率pmutation 表示變異概率本文首先是通過隨機產(chǎn)生的密鑰對某段英文文章進行加密,這就可以使用替換密碼來解決。、方差為2的正態(tài)分布的一個隨機數(shù)來替代原有基因值。高斯變異是改進遺傳算法對重點搜索區(qū)域的局部搜索性能的另一種變異操作方法。對每個基因座都以相同的概率進行變異運算之后,相當(dāng)于整個解向量在解空間中作了個輕微的變動,這就是非均勻變異[15]。邊界變異操作[14]是均勻變異操作的一個變形,它是隨機取基因座的二個對應(yīng)邊界基因值之一去替代原有基因值。變異算子的設(shè)計包括如下兩方面內(nèi)容:(1)如何確定變異點的位置?(2)如何進行基因值替換?基本位變異操作是指對個體編碼串中以變異概率Pm隨機指定的某一位或某幾位基因座上的基因值作變異運算,它的改變只是在個體編碼串中的個別幾個基因座上的基因值,并且變異發(fā)生的概率也比較小,所以發(fā)揮的作用比較慢,作用效果也不明顯。在遺傳算法中使用變異算子主要有兩個目的:(1)改善遺傳算法的局部搜索能力。如假設(shè)TSP的城市數(shù)為8,兩個父代染色體分別為:fl{25036147}和f2{34072516},首先隨機選取兩個點比如3和6標(biāo)記為x,那么f1和f2就變?yōu)橐韵滦问剑篺l{250x36lx47}f2{340x725xl6}觀察兩個父代的中段,記錄下對應(yīng)關(guān)系,即3一7,6一2,1一5,逐個檢查父代的每一個基因,每次找到相匹配的基因,就進行交換:3和7交換:s1{25076143},s2{74032516}6和2交換:s1{65072143},s2{74036512}l和5交換:s1{61072543},s2{74036152}交叉完成,得到sl和s2兩個新的城市序列。部分匹配交叉[13]是由Goldberg在1985年針對TSP提出的基于路徑表示的交叉操作。:y x y x y x y x y x算術(shù)交叉是指由兩個個體的線性組合而產(chǎn)生出兩個新的個體。A:x x x x x x x x x x A180。雙點交叉操作的示例如下:例如取兩個父代個體如下:P1:A B C D E FP2:B D F E C A對第三到第五個字符進行交叉操作后,得到子代個體為:C1:A B F E C FC2:B D C D E A多點交叉是指在個體編碼串中隨機設(shè)置多個交叉點,然后進行基因交換。雙點交叉的操作過程如下:(1)在相互配對的兩個個體編碼串中隨機設(shè)置兩個交叉點。:1 0 1 1 0 1 1 1 1 1 B:0 0 0 1 1 1 0 0 1 1 B180。單點交叉的重要特點是:若鄰接基因座之間的關(guān)系能提供較好的個體性狀和較高的個體適應(yīng)度的話,則這種單點交叉操作破壞