【文章標(biāo)題】: 密碼學(xué)入門系列(四) 之 維吉尼亞密碼(古典)
【文章作者】: jackozoo
【作者郵箱】: jackozoo@163.com
【作者聲明】: 只是感興趣,沒有其他目的。失誤之處敬請(qǐng)諸位大俠賜教!
--------------------------------------------------------------------------------
【詳細(xì)過程】
系列聲明: 見一.
維吉尼亞密碼(Vige nere Cipher)簡(jiǎn)介:
大家熟知, 早前的單一的凱撒密碼保密性能是十分的差的, 因此人們?cè)趩我坏膭P撒密碼的基礎(chǔ)上擴(kuò)展出了多表密碼, 稱之為維吉尼亞密碼. 它是由16世紀(jì)法國(guó)亨利三世王朝的不萊塞-維吉尼亞發(fā)明的. 關(guān)于維吉尼亞的密碼的歷史我這里就不做多的介紹了, 有興趣的朋友可以在互聯(lián)網(wǎng)上搜索相關(guān)文獻(xiàn)查看.
維吉尼亞密碼的特點(diǎn)是將26個(gè)凱撒密碼表(也即我們常用的Z26)合成一個(gè)表.
如下:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z A B C D E F G H I J K L M N O P Q R S T U V W X Y
這樣我們就從傳統(tǒng)的單表替換擴(kuò)展到了多表替換了.
引入一個(gè)概念:秘匙
在前面的凱撒移位密碼和仿射密碼中, 我們同樣引入了秘匙的概念, 不過那里的秘匙只是一個(gè)或兩個(gè)數(shù)字. 而在這里的秘匙是一個(gè)更為廣義上的秘匙.
它是一個(gè)串. 不在局限于一個(gè)或兩個(gè)整數(shù).
維吉尼亞密碼的原理:
比如明文為JACKOZOO, 秘匙為L(zhǎng)OVE, 則我們的密文是這樣得到的:
J對(duì)應(yīng)的密文我們查秘匙為L(zhǎng), 則在第L行中, 找到與第一行中的J對(duì)應(yīng)的字母為 U.
A對(duì)應(yīng)的密文我們查秘匙為O, 則在第O行中, 找到與第一行中的A對(duì)應(yīng)的字母為 O.
C對(duì)應(yīng)的密文我們查秘匙為V, 則在第V行中, 找到與第一行中的C對(duì)應(yīng)的字母為 X.
K對(duì)應(yīng)的密文我們查秘匙為E, 則在第E行中, 找到與第一行中的K對(duì)應(yīng)的字母為 O.
O對(duì)應(yīng)的密文我們查秘匙為L(zhǎng), 則在第L行中, 找到與第一行中的O對(duì)應(yīng)的字母為 Z. (如果秘匙不夠了,我們就循環(huán)使用秘匙, LOVELOVELO ... )
Z對(duì)應(yīng)的密文我們查秘匙為O, 則在第O行中, 找到與第一行中的Z對(duì)應(yīng)的字母為 N.
O對(duì)應(yīng)的密文我們查秘匙為V, 則在第V行中, 找到與第一行中的O對(duì)應(yīng)的字母為 J.
O對(duì)應(yīng)的密文我們查秘匙為E, 則在第E行中, 找到與第一行中的O對(duì)應(yīng)的字母為 S.
由此得到JACKOZOO在以LOVE作為秘匙的情況下, 其密文為: UOXOZNJS.
我們看到維吉尼亞密碼也很好地隱藏了字頻信息.
但是這里不得不提的是, 維吉尼亞密碼(Vigenere Cipher)相對(duì)于希爾密碼(Hill Cipher)來(lái)說(shuō), 其對(duì)字頻信息的隱藏還不夠徹底.
這也導(dǎo)致了在19世紀(jì)50年代, 英國(guó)人查爾斯-巴貝奇對(duì)其的破解. 其實(shí)其破解的基本思想如下:
比如在密文中, 經(jīng)常出現(xiàn)了同一個(gè)子串(比如UPK), 而且每個(gè)字串之間的距離都是3的整數(shù)倍. 那么解密者就很容易推測(cè)出秘匙的長(zhǎng)度為3. 其原因也是十分簡(jiǎn)單的:
當(dāng)秘匙在重復(fù)了N次之后, 其還是用第一個(gè)字母去加密UPK相應(yīng)的明文. 尤其是對(duì)THE, YOU, WHAT 這類高頻詞匯當(dāng)使用了弱秘匙的話,更容易遭受破解. 關(guān)于維吉
尼亞密碼的具體破解工作, 不在本文范圍之內(nèi), 有興趣的朋友可以自行研究.
以上介紹的是維吉尼亞密碼的加密, 解密的話, 直接找出相應(yīng)行在第一行中對(duì)應(yīng)的字母即可.
通過對(duì)維吉尼亞密碼原理的學(xué)習(xí), 我們不難發(fā)現(xiàn)用計(jì)算機(jī)語(yǔ)言寫出維吉尼亞的算法也是很簡(jiǎn)單的一件事情.
加密:
nMLen = strlen(szM); nKLen = strlen(szK); for (i=0;i<nMLen;i++) { szL[i] = ((szM[i]-'A') + (szK[i%nKLen]-'A')) % 26 + 'A'; }
解密:
nLLen = strlen(szL); nKLen = strlen(szK); for (i=0;i<nLLen;i++) { szM[i] = ((szL[i]-'A') + (szK[i%nKLen]-'A')) % 26 + 'A'; if (szM[i] < 'A') { szM[i] += 26; } }
附件中為維吉尼亞密碼學(xué)習(xí)輔助軟件. 希望大家用的上. ::)
--------------------------------------------------------------------------------
【版權(quán)聲明】: 本文原創(chuàng)于看雪技術(shù)論壇, 轉(zhuǎn)載請(qǐng)注明作者并保持文章的完整, 謝謝!
2009年05月23日 PM 04:39:14