基于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 相关文章推荐
wxpython学习笔记(推荐查看)
Jun 09 Python
批量获取及验证HTTP代理的Python脚本
Apr 23 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
书单|人生苦短,你还不用python!
Dec 29 Python
浅谈Python的list中的选取范围
Nov 12 Python
python之Flask实现简单登录功能的示例代码
Dec 24 Python
解决python xx.py文件点击完之后一闪而过的问题
Jun 24 Python
Python 旋转打印各种矩形的方法
Jul 09 Python
python ctypes库2_指定参数类型和返回类型详解
Nov 19 Python
如何利用pygame实现简单的五子棋游戏
Dec 29 Python
使用Python发现隐藏的wifi
Mar 04 Python
python通用数据库操作工具 pydbclib的使用简介
Dec 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
php下目前为目最全的CURL中文说明
2010/08/01 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
JQUERY操作JSON实例代码
2010/02/09 Javascript
清空上传控件input file的值
2010/07/03 Javascript
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
jQuery实现下拉框选择图片功能实例
2015/08/08 Javascript
常用的javascript设计模式
2017/01/11 Javascript
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
JavaScript引用类型RegExp基本用法详解
2018/08/09 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
python实现八大排序算法(1)
2017/09/14 Python
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
python实现手机通讯录搜索功能
2018/02/22 Python
对python:循环定义多个变量的实例详解
2019/01/20 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
python计算无向图节点度的实例代码
2019/11/22 Python
Python decorator拦截器代码实例解析
2020/04/04 Python
Python流程控制语句的深入讲解
2020/06/15 Python
numba提升python运行速度的实例方法
2021/01/25 Python
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
Stio官网:男女、儿童户外服装
2019/12/13 全球购物
书香校园活动方案
2014/02/28 职场文书
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫
如何使用SQL Server语句创建表
2022/04/12 SQL Server