基于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实现的阳历转阴历(农历)算法
Apr 25 Python
在Python的Django框架中更新数据库数据的方法
Jul 17 Python
Python WXPY实现微信监控报警功能的代码
Oct 20 Python
解决python3中解压zip文件是文件名乱码的问题
Mar 22 Python
python动态进度条的实现代码
Jul 03 Python
简单了解python PEP的一些知识
Jul 13 Python
基于Python安装pyecharts所遇的问题及解决方法
Aug 12 Python
python config文件的读写操作示例
Sep 27 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
keras中模型训练class_weight,sample_weight区别说明
May 23 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
May 25 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
Nov 24 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
火车头采集器3.0采集图文教程
2007/03/17 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
老生常谈javascript的类型转换
2016/10/12 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
基于JavaScript实现焦点图轮播效果
2017/03/27 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
解决layui table表单提示数据接口请求异常的问题
2019/09/24 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
Vue组件生命周期运行原理解析
2020/11/25 Vue.js
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
python 图像平移和旋转的实例
2019/01/10 Python
Django如何将URL映射到视图
2019/07/29 Python
Python读取YAML文件过程详解
2019/12/30 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
应聘自荐书
2013/10/08 职场文书
英语硕士生求职简历的自我评价
2013/10/15 职场文书
大学生工作推荐信范文
2013/12/02 职场文书
自我评价的写作规则
2014/01/06 职场文书
函授自我鉴定范文
2014/02/06 职场文书
三月学雷锋活动总结
2014/06/26 职场文书
先进个人推荐材料
2014/12/29 职场文书
运动员加油词
2015/07/18 职场文书
python实现三阶魔方还原的示例代码
2021/04/28 Python