Playfair加密算法
在經(jīng)典加密算法中,最著名的多字母加密算法是Playfair加密算法,曾被英國陸軍在第一次世界大戰(zhàn)中作為第一流領(lǐng)域系統(tǒng)使用,并在第二次世界大戰(zhàn)中仍被美國陸軍和其他同盟軍使用。那么我們今天就給大家來介紹一下這種Playfair加密算法。
Playfair的加密過程
Playfair加密算法根據(jù)下列規(guī)則一次對明文的兩個字母進(jìn)行加密,這兩個字母構(gòu)成一對。其加密規(guī)則如下:
(1)一對明文字母如果是重復(fù)的。則在這對明文字母種間插入一個填充字符。如X。因此,單詞session將被分割成:se、sx、si、on。
(2)如果分割后的明文字母對在矩陣的同一行中都出現(xiàn),則分別用矩陣中其右側(cè)的字母代替,行的最后一個字母由行的第一個字母代替。例如,on被加密成qo,而st被加tn。
(3)如果分割后的明文字母對在矩陣的一列中都出現(xiàn),則分別用矩陣中其下方的字母代替,列的最后一個字母由列的第一個字母代替。例如,en被加密成nu,而aw被加密成ba。
(4)如果分割后的明文字母對既不在矩陣的同一列中都出現(xiàn)也不在矩陣的同一行中都出現(xiàn),密文是這兩個字母所在的長方形的另兩個頂點。例如,se被加密成nk,而cu被加密成ix(或jx)。
(5)如果明文有奇數(shù)個字母,末尾加一個無效字母。
Playfair加密算法與單字母替代密碼相比有明顯的優(yōu)勢
第一、雙字母有26x26=676種組合方式,識別各種雙字母組合比單字母困難得多;
第二、各種字母組的相對頻率范圍也更為廣泛,使頻率分析更加困難。
因此,Playfair加密算法曾被認(rèn)為是不可破譯的。
Playfair加密算法的實現(xiàn)
用vb模擬實現(xiàn)時,有設(shè)置密鑰、加密、算法簡介、重新輸入、退出這五個按鈕(圖一)和三個文本框:分別用于輸入明文、矩陣的關(guān)鍵字和輸出密文。
根據(jù)密鑰矩陣生成的原則,若取關(guān)鍵字為Playfair,則生成的密鑰(圖一)。以下的加密實現(xiàn)都是基于以Playfair為關(guān)鍵字生成的密鑰矩陣。若設(shè)明文為plnuamdi。
因為pl在同一行,nu在同一列,am既不在同一列也不在同一行,di在同一行。依據(jù)加密規(guī)則其密文為laupflair。在本模擬系統(tǒng)中,我們對于兩個一樣的明文和奇數(shù)個明文采取增加大寫字母Z的方式來實現(xiàn)??紤]到解密的可行性,我們只對奇數(shù)個明文進(jìn)行了循環(huán)加密,對兩個一樣的明文只是增加了一個大寫字母Z。
Playfair加密算法主要程序
Function Encode Char(char1 As String, char2 As String) As String
Dim x1,x2, y1, y2 As Integer
Dim flag1,flag2 As Boolean
If (Asc(char1)> asc_z_l) Then
flag1= True
char1 = Chr(Asc(charl)_asc_change)
End If
If (Asc(char2)> asc_z_l) Then
flag2 = True
char2 = Cbr(Asc(char2)_ asc_change)
End If
If (GetXYln ex(char1, x1, y1) And GetXYindex(char2. x2. y2) Then
"相同字符
If (x1 =x2/ id y1 = y2) then
EncodeChar Case Low(char1. flag1) + fillChar + CaseLow(char2, flag2)
"同行字符
EncodeChar Case Low(matrix(x1. (y1 + 1) Mod 5), flag1) + Case Low(matrix(x2, (y2 +1) Mod 5) flag2)
"同列字符
Else if (x1=x2) Then
Encode Char caseLow (matrix((x1 + 1) Mod 5, y1), flag1) + Case Low(matrix(x2 +1l) Mod 5, y2),flag2)
"對角字符
Else
Encode Char= caseLow(matrix(x1. y2), flag1) + CaseLow(matrix(x2. y1), flag2)
End If
Else
Encode Char= aseLow(char1.FLag1) + CaseLow(char2, flag2)
End If
End Function
小知識之矩陣:在數(shù)學(xué)上,矩陣是指縱橫排列的二維數(shù)據(jù)表格,最早來自于方程組的系數(shù)及常數(shù)所構(gòu)成的方陣。










