基于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抓取网页内容示例分享
Feb 24 Python
利用Python学习RabbitMQ消息队列
Nov 30 Python
Python数据库的连接实现方法与注意事项
Feb 27 Python
python中range()与xrange()用法分析
Sep 21 Python
更改Ubuntu默认python版本的两种方法python-> Anaconda
Dec 18 Python
Python中协程用法代码详解
Feb 10 Python
对Python中DataFrame按照行遍历的方法
Apr 08 Python
Python3的介绍、安装和命令行的认识(推荐)
Oct 20 Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 Python
python 读取文件并把矩阵转成numpy的两种方法
Feb 12 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
Apr 20 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 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中FTP函数ftp_connect、ftp_login与ftp_chmod用法
2014/11/18 PHP
php中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
PHP中Session可能会引起并发问题
2015/06/26 PHP
PHP中each与list用法分析
2016/01/08 PHP
微信红包随机生成算法php版
2016/07/21 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
2020/01/23 PHP
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
JS实现的简易拖放效果示例
2016/12/29 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
实现两个文本框同时输入的实例
2017/09/25 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
微信小程序block的使用教程
2018/04/01 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
python获取目录下所有文件的方法
2015/06/01 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
python:动态路由的Flask程序代码
2019/11/22 Python
css3旋转木马_动力节点Java学院整理
2017/07/12 HTML / CSS
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
亲戚结婚的请假条
2014/02/11 职场文书
生产操作工岗位职责
2014/09/16 职场文书
违纪检讨书范文
2015/01/27 职场文书
挂职锻炼个人总结
2015/03/05 职场文书
试用期旷工辞退通知书
2015/04/17 职场文书
远程教育学习心得体会
2016/01/23 职场文书
JS中如何优雅的使用async await详解
2021/10/05 Javascript
TypeScript 内置高级类型编程示例
2022/09/23 Javascript