基于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生成随机密码
Mar 10 Python
Django项目中包含多个应用时对url的配置方法
May 30 Python
Python实例方法、类方法、静态方法的区别与作用详解
Mar 25 Python
对django views中 request, response的常用操作详解
Jul 17 Python
python 实现手机自动拨打电话的方法(通话压力测试)
Aug 08 Python
Python高级特性 切片 迭代解析
Aug 23 Python
Django 简单实现分页与搜索功能的示例代码
Nov 07 Python
PyQt5+Pycharm安装和配置图文教程详解
Mar 24 Python
python将音频进行变速的操作方法
Apr 08 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
Apr 22 Python
Python中免验证跳转到内容页的实例代码
Oct 23 Python
python中二分查找法的实现方法
Dec 06 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
PHP 5.0对象模型深度探索之绑定
2006/09/05 PHP
PHP详解ASCII码对照表与字符转换
2011/12/05 PHP
浅析PHP 按位与或 (^ 、&)
2013/06/21 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
2018/08/15 PHP
php-fpm中max_children的配置
2019/03/15 PHP
关于javascript 回调函数中变量作用域的讨论
2009/09/11 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
jQuery设置和获取HTML、文本和值示例
2014/07/08 Javascript
jQuery中map()方法用法实例
2015/01/06 Javascript
jQuery元素的隐藏与显示实例
2015/01/20 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
2015/03/04 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
JS图片预加载三种实现方法解析
2020/05/08 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
[01:04:39]OG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python获取脚本所在目录的正确方法
2014/04/15 Python
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
python实现分析apache和nginx日志文件并输出访客ip列表的方法
2015/04/04 Python
Django与遗留的数据库整合的方法指南
2015/07/24 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
python matplotlib imshow热图坐标替换/映射实例
2020/03/14 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
2020/11/20 Python
阿迪达斯法国官方网站:adidas法国
2018/03/20 全球购物
端午节活动策划方案
2014/03/09 职场文书
就业协议书的作用
2014/04/11 职场文书
应届生求职信
2014/05/31 职场文书
openstack中的rpc远程调用的方法
2021/07/09 Python