基于Python解密仿射密码


Posted in Python onOctober 21, 2019

新学期有一门密码学课,课上老师布置了一道密码学题,题目如下:

解密由仿射密码加密的密文“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 相关文章推荐
Python BeautifulSoup中文乱码问题的2种解决方法
Apr 22 Python
python查找目录下指定扩展名的文件实例
Apr 01 Python
Python selenium如何设置等待时间
Sep 15 Python
Python采集代理ip并判断是否可用和定时更新的方法
May 07 Python
Python实现自定义函数的5种常见形式分析
Jun 16 Python
Python常见排序操作示例【字典、列表、指定元素等】
Aug 15 Python
Python实现将Excel转换成为image的方法
Oct 23 Python
利用Django模版生成树状结构实例代码
May 19 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
从0到1使用python开发一个半自动答题小程序的实现
May 12 Python
Appium+Python实现简单的自动化登录测试的实现
Jan 26 Python
python实现双向链表原理
May 25 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 #Python
python超时重新请求解决方案
Oct 21 #Python
详解python中*号的用法
Oct 21 #Python
python中bytes和str类型的区别
Oct 21 #Python
python中@property和property函数常见使用方法示例
Oct 21 #Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
Oct 21 #Python
基于python解线性矩阵方程(numpy中的matrix类)
Oct 21 #Python
You might like
2020年4月新番动漫目录 官方宣布4月播出的作品一览
2020/03/08 日漫
php+html5基于websocket实现聊天室的方法
2015/07/17 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
PHP获取MySQL执行sql语句的查询时间方法
2018/08/21 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
JavaScript实现的in_array函数
2014/08/27 Javascript
javascript Deferred和递归次数限制实例
2014/10/21 Javascript
Node.js 制作实时多人游戏框架
2015/01/08 Javascript
JavaScript中操作字符串之localeCompare()方法的使用
2015/06/06 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
js实现碰撞检测
2021/01/29 Javascript
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
Python找出9个连续的空闲端口
2016/02/01 Python
关于Python面向对象编程的知识点总结
2017/02/14 Python
简单了解Python3里的一些新特性
2019/07/13 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
Python使用Pygame绘制时钟
2020/11/29 Python
会走动的图形html5时钟示例
2014/04/27 HTML / CSS
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
建筑工程实习自我鉴定
2013/09/19 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
淘宝好评语大全
2014/05/05 职场文书
地球物理学专业推荐信
2014/09/08 职场文书
五年级上册复习计划
2015/01/19 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL
JS数组方法some、every和find的使用详情
2021/10/05 Javascript
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python