温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

基于Python解密仿射密码的示例分析

发布时间:2021-07-21 14:27:56 来源:亿速云 阅读:166 作者:小新 栏目:开发技术

小编给大家分享一下基于Python解密仿射密码的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

题目如下:

解密由仿射密码加密的密文“DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS”

想解密这个密文,首先必须要知道仿射密码是什么:

仿射密码是一种代换密码,加解密公式如下

加密:C=E([a,b],p)=(ap+b) mod 26C=E([a,b],p)=(ap+b) mod 26

解密:p=D([a,b],C)=((C−b)/a) mod 26p=D([a,b],C)=((C−b)/a) mod 26

很显然不能靠人力来解密,只好求助于计算机程序,下面是我写的用Python解密的代码,输出结果后要用语言学的知识(肉眼观察)来辨别哪一个是我们所需要的明文。此外,解密过程涉及到求逆元的过程,需要定义一个函数NI。

#encoding:utf-8 def NI(x,b): #定义求x关于b的逆元的函数NI,其中(NI(x,b)*x) mod b = 1 当x和b互质时求出的逆元唯一   i = 1   while (x*i)%b != 1:     i = i + 1   return i c = "DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS" C = [] #对密文进行预处理并储存在列表中,储存形式是对应字母在26个英文字母中的位序 for i in c:   if i == ' ':     C.append(i)   else:     C.append(ord(i)-65) #将加密算法中a可能的取值储存在列表中 a = [3,5,7,9,11,15,17,19,21,23,25] P = [] for keyb in range(0,26):   for keya in a:     ni_a = NI(keya,26)     for s in C:       if s == ' ':         P.append(' ')       else:         P.append(((s-keyb)*ni_a)%26) #将明文字母对应的位次码依次加入到明文列表中     strP = ''     for t in P:       if t==' ':         strP = strP + ' '       else:         strP = strP + chr(t+97) #将明文转化为字符串并输出     print(strP)     P = []

运行文件后依次打印出所有可能的明文。经过寻找,发现如下一行应当是所求的明文。

基于Python解密仿射密码的示例分析

读出明文应当为theres no business like show business。

以上是“基于Python解密仿射密码的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI