基于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 相关文章推荐
Django实现图片文字同时提交的方法
May 26 Python
pygame游戏之旅 添加游戏介绍
Nov 20 Python
不到20行代码用Python做一个智能聊天机器人
Apr 19 Python
Python内置random模块生成随机数的方法
May 31 Python
Python+PyQT5的子线程更新UI界面的实例
Jun 14 Python
python编写猜数字小游戏
Oct 06 Python
Python新手如何理解循环加载模块
May 29 Python
python中selenium库的基本使用详解
Jul 31 Python
Python 带星号(* 或 **)的函数参数详解
Feb 23 Python
Python可变与不可变数据和深拷贝与浅拷贝
Apr 06 Python
Python进程间的通信之语法学习
Apr 11 Python
python如何将mat文件转为png
Jul 15 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
实用函数7
2007/11/08 PHP
解析如何屏蔽php中的phpinfo()函数
2013/06/06 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
jquery nth-child()选择器的简单应用
2010/07/10 Javascript
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
javascript如何判断输入的url是否正确
2014/04/11 Javascript
绑定回车enter事件代码
2014/05/18 Javascript
九种原生js动画效果
2015/11/11 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
基于JS递归函数细化认识及实用实例(推荐)
2017/08/07 Javascript
实例详解BootStrap的动态模态框及静态模态框
2018/08/13 Javascript
vue-for循环嵌套操作示例
2019/01/28 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
Webpack设置环境变量的一些误区详解
2019/12/19 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
python正则分析nginx的访问日志
2017/01/17 Python
python实现kMeans算法
2017/12/21 Python
python最长回文串算法
2018/06/04 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
python实现汽车管理系统
2018/11/30 Python
Python基础之文件读取的讲解
2019/02/16 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
如何在python中执行另一个py文件
2020/04/30 Python
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
纪念建党演讲稿范文
2014/01/13 职场文书
商场开业庆典策划方案
2014/06/02 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书
子女赡养老人协议书
2016/03/23 职场文书