基于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实现的单向循环链表功能示例
Nov 10 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
Apr 27 Python
flask实现验证码并验证功能
Dec 05 Python
关于ResNeXt网络的pytorch实现
Jan 14 Python
Python 线性回归分析以及评价指标详解
Apr 02 Python
Python任务调度利器之APScheduler详解
Apr 02 Python
python 制作python包,封装成可用模块教程
Jul 13 Python
解决Django响应JsonResponse返回json格式数据报错问题
Aug 09 Python
Django数据模型中on_delete使用详解
Nov 30 Python
python 将html转换为pdf的几种方法
Dec 29 Python
python实现控制台输出颜色
Mar 02 Python
python游戏开发Pygame框架
Apr 22 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
为了这两部电子管收音机,买了6套全新电子管和10粒刻度盘灯泡
2021/03/02 无线电
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
PHP单态模式简单用法示例
2016/11/16 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
如何优雅的使用 laravel 的 validator验证方法
2018/11/11 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
php常用的工具开发整理
2019/09/26 PHP
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
DOM 中的事件处理介绍
2012/01/18 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
使用coffeescript编写node.js项目的方法汇总
2015/08/05 Javascript
javascript实现下雪效果【实例代码】
2016/05/03 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
python交互式图形编程实例(一)
2017/11/17 Python
K-近邻算法的python实现代码分享
2017/12/09 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
python实现闹钟定时播放音乐功能
2018/01/25 Python
python 将md5转为16字节的方法
2018/05/29 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
Python datetime模块使用方法小结
2020/06/18 Python
运动会广播稿400字
2014/01/25 职场文书
高中学生期末评语
2014/04/25 职场文书
幼儿园优秀班主任事迹材料
2014/05/14 职场文书
中学生的1000字检讨书
2014/10/11 职场文书
2014年班组长工作总结
2014/11/20 职场文书
原料仓管员岗位职责
2015/04/01 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
HR必备:销售经理聘用合同范本
2019/08/21 职场文书
mysql批量新增和存储的方法实例
2021/04/07 MySQL