愷撒(Caesar)密碼 與 映射(Affine)密碼

愷撒密碼

如其名,這是愷撒大帝創造的一種加密方法(已知最早)
需要一個參數k,來表示後移/前移的位數

加密方式:
將原文的每一位字母后移k位,超過則回到頭。
爲用數學方式表達,先把字母編碼爲數字,如0~25共26個數字對應A-Z。這樣之後對於每一個字母 α ,總能找出它在映射下的一個像 f(α)=(num(α)+k)mod26f(α) = (num(α) + k) mod 26,num(α)代表其數字編碼,k代表後移位數,mod26起到的效果是超越 Z 就回到開頭。這時,這個像 f(α)f(α) 就是 α 的密文。
遇到字母序列時,逐個加密即可。

解密方式:
後移的逆過程是前移,前移k位就是解密。
r(α)=(num(α)k)mod26r(α) = (num(α) - k) mod 26α 在這裏是密文字母,r(α)r(α)是原文。
注意,這裏的取模需要換成0~25間的數,因爲一部分編程語言的取模是跟着被除數走的(如C++),即1%5=1-1\%5=-1,但負數無對應字母,所以當 num(α)k<0num(α)-k<0時,需要將取模結果 +26 才能得到原文對應的數字。

關於如何識別:
當已知原文的一部分和完整密文時,可以查看對應字母是否都錯k位。
未知原文但密文較長時,可以考慮統計字母頻率。英語中最常用的5個字母及其大概的相對頻率:

E T A O I
13% 9% 8% 8% 7%

統計密文,將密文中出現次數最多的字母和上表依此嘗試對應。


映射密碼

其實是愷撒密碼的升級,將單純的後移規則加上了乘數,解密難度有所增加。
需要兩個參數:b,k 分別代表乘數和後移位數

加密方式:
f(α)=(bnum(α)+k)mod26f(α) = (b*num(α) + k) mod 26,α是原文字母。

解密方式:
經過模下運算可得:r(α)=b1(num(α)k)mod26r(α) = b^{-1}(num(α) - k) mod 26,其中b1b^{-1}表示b在mod26意義下的逆元。

判斷方式:愷撒密碼配對方式失敗時,可以嘗試一下,但是參數不容易求出,在已知部分原文的情況下可以嘗試暴力找出b和k


映射表方面,其實不侷限於A~Z對應0-25,也可以A-Z-a-z對應0-25-26-51這種,後者不太容易識別,安全性也更高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章