基于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 域名分析工具实现代码
Jul 15 Python
Python学习笔记之常用函数及说明
May 23 Python
python urllib爬取百度云连接的实例代码
Jun 19 Python
Python中用psycopg2模块操作PostgreSQL方法
Nov 28 Python
Win8下python3.5.1安装教程
Jul 29 Python
python实现坦克大战游戏 附详细注释
Mar 27 Python
在django中自定义字段Field详解
Dec 03 Python
python FTP批量下载/删除/上传实例
Dec 22 Python
django从后台返回html代码的实例
Mar 11 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
Python类绑定方法及非绑定方法实例解析
Oct 09 Python
PyCharm Community安装与配置的详细教程
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
php根据身份证号码计算年龄的实例代码
2014/01/18 PHP
js option删除代码集合
2008/11/12 Javascript
JQuery的html(data)方法与<script>脚本块的解决方法
2010/03/09 Javascript
parseInt parseFloat js字符串转换数字
2010/08/01 Javascript
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
js获取指定日期前后的日期代码
2013/08/20 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
JavaScript来实现打开链接页面的简单实例
2016/06/02 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
2017/03/10 Javascript
JS中的多态实例详解
2017/10/15 Javascript
JS实现多物体运动的方法详解
2018/01/23 Javascript
web前端页面生成exe可执行文件的方法
2018/02/08 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
2019/11/29 Javascript
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
Python栈类实例分析
2015/06/15 Python
Python中subprocess的简单使用示例
2015/07/28 Python
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
Python模拟三级菜单效果
2017/09/11 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
详解Python中import机制
2020/09/11 Python
CSS3 旋转立方体问题详解
2020/01/09 HTML / CSS
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
教师自我鉴定
2013/12/13 职场文书
项目申报专员岗位职责
2014/07/09 职场文书
学习十八大的心得体会
2014/09/12 职场文书
药品开票员岗位职责
2015/04/15 职场文书
60条职场经典语录,总有一条能触动你的心
2019/08/21 职场文书
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电