基于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最基本的输入输出详解
Apr 25 Python
python自动翻译实现方法
May 28 Python
python3操作mysql数据库的方法
Jun 23 Python
用python做一个搜索引擎(Pylucene)的实例代码
Jul 05 Python
python清理子进程机制剖析
Nov 23 Python
python解析json串与正则匹配对比方法
Dec 20 Python
Python模块的加载讲解
Jan 15 Python
pytorch实现onehot编码转为普通label标签
Jan 02 Python
Python 支持向量机分类器的实现
Jan 15 Python
python模拟点击网页按钮实现方法
Feb 25 Python
python实现ftp文件传输功能
Mar 20 Python
OpenCV利用python来实现图像的直方图均衡化
Oct 21 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
自制汽车收音机天线:收听广播的技巧和方法
2021/03/02 无线电
php做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
PHP 类与构造函数解析
2017/02/06 PHP
php base64 编码与解码实例代码
2017/03/21 PHP
简单的JS多重继承示例
2008/03/13 Javascript
简单的js分页脚本
2009/05/21 Javascript
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
ExtJS 入门
2010/10/29 Javascript
基于jQuery实现的当离开页面时出现提示的实现代码
2011/06/27 Javascript
瀑布流布局并自动加载实现代码
2013/03/12 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
微信小程序 获取设备信息 API实例详解
2016/10/02 Javascript
解析js如何获取css样式
2016/12/11 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
基于JavaScript实现瀑布流布局
2018/08/15 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
python实现简易淘宝购物
2019/11/22 Python
python使用hdfs3模块对hdfs进行操作详解
2020/06/06 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
应届生人事助理求职信
2013/11/09 职场文书
中考学习决心书
2015/02/04 职场文书
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL