热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

趣味密码学之四后记:恺撒码补遗

上次讲到恺撒码很容易被破解,因此在它的基础上又作出了很多改进。恺撒码属于字母表的平移变换,其一般加密公式为f(a)(a+k)modn,n为字符集中字母的个数,k的取值范围是1

上次讲到恺撒码很容易被破解,因此在它的基础上又作出了很多改进。

恺撒码属于字母表的平移变换,其一般加密公式为 f(a)=(a+k) mod n,n为字符集中字母的个数,k的取值范围是1~25。当K=3时,这种变换就是恺撒码。

另一种办法就是改变字母表的顺序,也称为倍模变换,其一般加密公式为f(a)=ak mod n, n为字符集中字母的个数。在这里,k的取值必须与n互素(即最大公约数为1);否则会出现周期性,不同的字符会产生相同的加密结果。
如:k=5、n=26,变换公式为f(a) = (5*a ) mod 26

明文:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文:ejotydinsxchmrwbglqvafkpuz
因为z的编码为26,而k与26互素,所以 f(a)=(26*k) mod 26=26,明文z加密后还是它本身。同理,M(编码为13)也一样。
如果取k=2,k与26不互素,则会出现编码相同的情况。如,f(1)=(1*2) mod 26 =2,f(14)=(14*2) mod 26 =2,? 字母a和n的密文均为b,而且无法通过解密公式确定明文。这样的情况会同样出现在b和o…m和z中,以13为周期重复产生相同的加密结果。

结合上述两种变换,就得到了广义恺撒码的公式,也称为线性变换。f(a)=(a*k1+k2) mod n , n为字符集中字母的个数, k的取值必须与n互素。如k1=3,k2=2,n=26

明文:abcdef
密文:ehknqt
这三种方法的解密都很简单,但是都达到了混乱原文的效果。而只要知道密钥得到密码表,解密的方法也很简单。

推荐阅读
author-avatar
沉白
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有