恺撒(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这种,后者不太容易识别,安全性也更高。

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