恺撒(Caesar)密码 与 映射(Affine)密码

恺撒密码

如其名,这是恺撒大帝创造的一种加密方法(已知最早)
需要一个参数k,来表示后移/前移的位数

加密方式:
将原文的每一位字母后移k位,超过则回到头。
为用数学方式表达,先把字母编码为数字,如0~25共26个数字对应A-Z。这样之后对于每一个字母 α ,总能找出它在映射下的一个像 f ( α ) = ( n u m ( α ) + k ) m o d 26 f(α) = (num(α) + k) mod 26 f(α)=(num(α)+k)mod26,num(α)代表其数字编码,k代表后移位数,mod26起到的效果是超越 Z 就回到开头。这时,这个像 f ( α ) f(α) f(α) 就是 α 的密文。
遇到字母序列时,逐个加密即可。

解密方式:
后移的逆过程是前移,前移k位就是解密。
r ( α ) = ( n u m ( α ) − k ) m o d 26 r(α) = (num(α) - k) mod 26 r(α)=(num(α)k)mod26α 在这里是密文字母, r ( α ) r(α) r(α)是原文。
注意,这里的取模需要换成0~25间的数,因为一部分编程语言的取模是跟着被除数走的(如C++),即 − 1 % 5 = − 1 -1\%5=-1 1%5=1,但负数无对应字母,所以当 n u m ( α ) − k < 0 num(α)-k<0 num(α)k<0时,需要将取模结果 +26 才能得到原文对应的数字。

关于如何识别:
当已知原文的一部分和完整密文时,可以查看对应字母是否都错k位。
未知原文但密文较长时,可以考虑统计字母频率。英语中最常用的5个字母及其大概的相对频率:

ETAOI
13%9%8%8%7%

统计密文,将密文中出现次数最多的字母和上表依此尝试对应。


映射密码

其实是恺撒密码的升级,将单纯的后移规则加上了乘数,解密难度有所增加。
需要两个参数:b,k 分别代表乘数和后移位数

加密方式:
f ( α ) = ( b ∗ n u m ( α ) + k ) m o d 26 f(α) = (b*num(α) + k) mod 26 f(α)=(bnum(α)+k)mod26,α是原文字母。

解密方式:
经过模下运算可得: r ( α ) = b − 1 ( n u m ( α ) − k ) m o d 26 r(α) = b^{-1}(num(α) - k) mod 26 r(α)=b1(num(α)k)mod26,其中 b − 1 b^{-1} b1表示b在mod26意义下的逆元。

判断方式:恺撒密码配对方式失败时,可以尝试一下,但是参数不容易求出,在已知部分原文的情况下可以尝试暴力找出b和k


映射表方面,其实不局限于A~Z对应0-25,也可以A-Z-a-z对应0-25-26-51这种,后者不太容易识别,安全性也更高。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值