恺撒密码
如其名,这是恺撒大帝创造的一种加密方法(已知最早)
需要一个参数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这种,后者不太容易识别,安全性也更高。