基于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 相关文章推荐
netbeans7安装python插件的方法图解
Dec 24 Python
python打开文件并获取文件相关属性的方法
Apr 23 Python
不要用强制方法杀掉python线程
Feb 26 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
Mar 15 Python
Python对excel文档的操作方法详解
Dec 10 Python
python读取Excel表格文件的方法
Sep 02 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
python 链接sqlserver 写接口实例
Mar 11 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 19 Python
解决使用Pandas 读取超过65536行的Excel文件问题
Nov 10 Python
Python日志打印里logging.getLogger源码分析详解
Jan 17 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
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
php文件缓存类汇总
2014/11/21 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
JavaScript实用技巧(一)
2010/08/16 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
2014/02/24 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
AngularJS遍历获取数组元素的方法示例
2017/11/11 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
小程序实现留言板
2018/11/02 Javascript
详解滑动穿透(锁body)终极探索
2019/04/16 Javascript
解决vue跨域axios异步通信问题
2019/04/17 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
Python字符串处理之count()方法的使用
2015/05/18 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
2017/09/20 Python
python中copy()与deepcopy()的区别小结
2018/08/03 Python
int在python中的含义以及用法
2019/06/27 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
python输出第n个默尼森数的实现示例
2020/03/08 Python
什么是python的函数体
2020/06/19 Python
通过代码实例了解Python异常本质
2020/09/16 Python
如何用Python徒手写线性回归
2021/01/25 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
迪拜航空官方网站:flydubai
2017/04/20 全球购物
班子四风对照检查材料
2014/08/21 职场文书
先进基层党组织事迹材料
2014/12/25 职场文书
交通事故和解协议书
2015/01/27 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
新闻通讯稿模板
2015/07/22 职场文书
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python