基于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 文件操作实现代码
Oct 07 Python
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
使用Python实现BT种子和磁力链接的相互转换
Nov 09 Python
Python时间的精准正则匹配方法分析
Aug 17 Python
Python实现翻转数组功能示例
Jan 12 Python
Python(Django)项目与Apache的管理交互的方法
May 16 Python
Python类的继承用法示例
Jan 31 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
Jul 10 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
Python 实现数组相减示例
Dec 27 Python
利用python实现.dcm格式图像转为.jpg格式
Jan 13 Python
python实现调用摄像头并拍照发邮箱
Apr 27 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
一个程序下载的管理程序(二)
2006/10/09 PHP
php自定义hash函数实例
2015/05/05 PHP
php strftime函数的详细用法
2018/06/21 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
2013/11/15 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
使用JavaScript开发IE浏览器本地插件实例
2015/02/18 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
Nodejs中 npm常用命令详解
2016/07/04 NodeJs
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
vue 中swiper的使用教程
2018/05/22 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
Python中用altzone()方法处理时区的教程
2015/05/22 Python
Python的Django框架中settings文件的部署建议
2015/05/30 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
Python实现的微信好友数据分析功能示例
2018/06/21 Python
pytorch 预训练层的使用方法
2019/08/20 Python
python实现猜数字游戏
2020/03/25 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
flask开启多线程的具体方法
2020/08/02 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
成人大专自我鉴定范文
2013/10/19 职场文书
光盘行动倡议书
2014/02/02 职场文书
村级个人对照检查材料
2014/08/22 职场文书
镇政府副镇长群众路线专题民主生活会对照检查材料
2014/09/19 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
Python函数中apply、map、applymap的区别
2021/11/27 Python
MySQL 开窗函数
2022/02/15 MySQL
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python