恺撒密码
如其名,这是恺撒大帝创造的一种加密方法(已知最早)
需要一个参数k,来表示后移/前移的位数
加密方式:
将原文的每一位字母后移k位,超过则回到头。
为用数学方式表达,先把字母编码为数字,如0~25共26个数字对应A-Z。这样之后对于每一个字母 α ,总能找出它在映射下的一个像 f(α)=(num(α)+k)mod26f(α) = (num(α) + k) mod 26f(α)=(num(α)+k)mod26,num(α)代表其数字编码,k代表后移位数,mod26起到的效果是超越 Z 就回到开头。这时,这个像 f(α)f(α)f(α) 就是 α 的密文。
遇到字母序列时,逐个加密即可。
解密方式:
后移的逆过程是前移,前移k位就是解密。
即 r(α)=(num(α)−k)mod26r(α) = (num(α) - k) mod 26r(α)=(num(α)−k)mod26, α 在这里是密文字母,r(α)r(α)r(α)是原文。
注意,这里的取模需要换成0~25间的数,因为一部分编程语言的取模是跟着被除数走的(如C++),即−1%5=−1-1\%5=-1−1%5=−1,但负数无对应字母,所以当 num(α)−k<0num(α)-k<0num(α)−k<0时,需要将取模结果 +26 才能得到原文对应的数字。
关于如何识别:
当已知原文的一部分和完整密文时,可以查看对应字母是否都错k位。
未知原文但密文较长时,可以考虑统计字母频率。英语中最常用的5个字母及其大概的相对频率:
| E | T | A | O | I |
|---|---|---|---|---|
| 13% | 9% | 8% | 8% | 7% |
统计密文,将密文中出现次数最多的字母和上表依此尝试对应。
映射密码
其实是恺撒密码的升级,将单纯的后移规则加上了乘数,解密难度有所增加。
需要两个参数:b,k 分别代表乘数和后移位数
加密方式:
f(α)=(b∗num(α)+k)mod26f(α) = (b*num(α) + k) mod 26f(α)=(b∗num(α)+k)mod26,α是原文字母。
解密方式:
经过模下运算可得:r(α)=b−1(num(α)−k)mod26r(α) = b^{-1}(num(α) - k) mod 26r(α)=b−1(num(α)−k)mod26,其中b−1b^{-1}b−1表示b在mod26意义下的逆元。
判断方式:恺撒密码配对方式失败时,可以尝试一下,但是参数不容易求出,在已知部分原文的情况下可以尝试暴力找出b和k
映射表方面,其实不局限于A~Z对应0-25,也可以A-Z-a-z对应0-25-26-51这种,后者不太容易识别,安全性也更高。
密码 与 映射(Affine)密码&spm=1001.2101.3001.5002&articleId=104865369&d=1&t=3&u=1ba6d789b7784d458d1298a304042853)
439

被折叠的 条评论
为什么被折叠?



