1. 程式人生 > >仿射密碼破解——再別康橋

仿射密碼破解——再別康橋

這裡有用仿射加密的一段詩歌密文(空格標點等沒有加密),請嘗試還原為明文並翻譯為中文

Ptfxgj Jnno-afv wn Htzaixojv Tjtxg
Af Yd Mqxzn
Kvif bdxvwsf X wtlv zf svtkv
Tp bdxvwsf tp X htzv qviv;
Bdxvwsf X rtkv jnno-afv
Wn wqv inpf hsndop xg wqv rvpwvig plf.
Wqv jnsovg rxssnrp af wqv ixkvipxov
Tiv fndgj aixovp xg wqv pvwwxgj pdg;
Wqvxi ivcsvhwxngp ng wqv pqxzzvixgj rtkvp
Tsrtfp sxgjvi xg wqv ovuwq nc zf qvtiw.
Wqv csntwxgj qvtiw jinrxgj xg wqv psdojv
Prtfp svxpdivsf dgovi wqv rtwvi;
Xg wqv jvgwsv rtkvp nc Htzaixojv
X rndso av t rtwvi ustgw!
Wqtw unns dgovi wqv pqtov nc vsz wivvp
Qnsop gnw rtwvi adw wqv itxganr cinz wqv plf;
Pqtwwvivo wn uxvhvp tzngj wqv odhlrvvop
Xp wqv pvoxzvgw nc t itxganr-sxlv oivtz.
Wn pvvl t oivtz? Edpw wn unsv t antw dupwivtz
Wn rqviv wqv jivvg jitpp xp zniv kviotgw;
Ni wn qtkv wqv antw cdssf sntovo rxwq pwtisxjqw
Tgo pxgj tsndo xg wqv pusvgoni nc pwtisxjqw.
Adw X htggnw pxgj tsndo
Bdxvwgvpp xp zf ctivrvss zdpxh;
Vkvg pdzzvi xgpvhwp qvtu pxsvghv cni zv
Pxsvgw xp Htzaixojv wngxjqw!
Kvif bdxvwsf X wtlv zf svtkv
Tp bdxvwsf tp X htzv qviv;
Jvgwsf X csxhl zf psvvkvp
Gnw vkvg t rxpu nc hsndo rxss X aixgj trtf

仿射密碼的定義:

將加法密碼和乘法密碼結合就構成了仿射密碼,仿射密碼的加密和解密演算法是:

加密演算法:C=Ek(m)=(k1m+k2)modn

解密演算法:M=Dk(c)=k1-1(c-k2)modn

仿射密碼具有可逆性的條件是gcd(k,n)=1。當k1=0時,仿射密碼變成加法密碼,當k2=0時,仿射密碼變成乘法密碼。

解密過程:

統計密文中各字母出現的頻率,然後與英文字母出現頻率比較,在嘗試過程中同時考慮仿射密碼的條件。

各個字母出現的頻率統計如下:

最大頻率的密文字母是小寫英文字母v(119次)、小寫字母w(67次)、小寫字母t(54次)、小寫字母p和小寫字母x(各52次)……

首先,我們可以猜想v是e的加密,而w是t的加密,因為e和t是兩個出現頻率最好的字母。e和t對應的數值是4,19,v和w物件的數值是21,22.對於仿射密碼有c=(k1m+k2)mod n

所以我們有兩個關於未知數的線性方程組:

     21=(4k1+k2)mod 26   即  4k1+k2=26m+21

     22=(19k1+k2)mod 26  即  19k1+k2=26m+22

K是滿足0<k<n的正整數。並且k1,k2要和n(26)互素,否則不存在模逆元,不能正確解密。當n為26字母,其中k1,k2的取值可能為1,3,5,7,9,11,15,17,19,21,23,25。

當m=1時,4k1+k2=47,19k1+k2=48,這個方程組有唯一解:k1=7,k2=19

其中gcd(7,26)=1,gcd(19,26)=1,即k-1=15

將明文利用翻譯軟體進行翻譯,得到下列結果:

所以,這一段密文解密出來,是徐志摩的再別康橋這一首詩!