愷撒密碼
如其名,這是愷撒大帝創造的一種加密方法(已知最早)
需要一個參數k,來表示後移/前移的位數
加密方式:
將原文的每一位字母后移k位,超過則回到頭。
爲用數學方式表達,先把字母編碼爲數字,如0~25共26個數字對應A-Z
。這樣之後對於每一個字母 α
,總能找出它在映射下的一個像 ,num(α)代表其數字編碼,k代表後移位數,mod26起到的效果是超越 Z 就回到開頭。這時,這個像 就是 α
的密文。
遇到字母序列時,逐個加密即可。
解密方式:
後移的逆過程是前移,前移k位就是解密。
即 , α
在這裏是密文字母,是原文。
注意,這裏的取模需要換成0~25間的數,因爲一部分編程語言的取模是跟着被除數走的(如C++),即,但負數無對應字母,所以當 時,需要將取模結果 +26 才能得到原文對應的數字。
關於如何識別:
當已知原文的一部分和完整密文時,可以查看對應字母是否都錯k位。
未知原文但密文較長時,可以考慮統計字母頻率。英語中最常用的5個字母及其大概的相對頻率:
E | T | A | O | I |
---|---|---|---|---|
13% | 9% | 8% | 8% | 7% |
統計密文,將密文中出現次數最多的字母和上表依此嘗試對應。
映射密碼
其實是愷撒密碼的升級,將單純的後移規則加上了乘數,解密難度有所增加。
需要兩個參數:b,k 分別代表乘數和後移位數
加密方式:
,α是原文字母。
解密方式:
經過模下運算可得:,其中表示b在mod26意義下的逆元。
判斷方式:愷撒密碼配對方式失敗時,可以嘗試一下,但是參數不容易求出,在已知部分原文的情況下可以嘗試暴力找出b和k
映射表方面,其實不侷限於A~Z對應0-25,也可以A-Z-a-z對應0-25-26-51這種,後者不太容易識別,安全性也更高。