基于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 encode和decode的妙用
Sep 02 Python
python编写网页爬虫脚本并实现APScheduler调度
Jul 28 Python
wxPython学习之主框架实例
Sep 28 Python
python根据出生日期返回年龄的方法
Mar 26 Python
Python去除字符串两端空格的方法
May 21 Python
python ChainMap 合并字典的实现步骤
Jun 11 Python
Python批量获取并保存手机号归属地和运营商的示例
Oct 09 Python
python 下划线的不同用法
Oct 24 Python
python Polars库的使用简介
Apr 21 Python
python实现进度条的多种实现
Apr 29 Python
pytorch 权重weight 与 梯度grad 可视化操作
Jun 05 Python
教你怎么用Python selenium操作浏览器对象的基础API
Jun 23 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 清空varnish 缓存的详解(包括指定站点下的)
2013/06/20 PHP
php猴子选大王问题解决方法
2015/05/12 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
javascript 异步页面查询实现代码(asp.net)
2010/05/26 Javascript
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
angular4自定义组件详解
2017/09/28 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
vux-scroller实现移动端上拉加载功能过程解析
2019/10/08 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
javascript History对象原理解析
2020/02/17 Javascript
python字典get()方法用法分析
2015/04/17 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
python切割图片的示例
2020/11/12 Python
css3教程之倾斜页面
2014/01/27 HTML / CSS
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
北京SQL新华信咨询
2016/09/30 面试题
C# .NET面试题
2015/11/28 面试题
行政总经理岗位职责
2013/12/05 职场文书
《狮子和兔子》教学反思
2014/03/02 职场文书
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
化工专业自荐书
2014/06/16 职场文书
小学生民族团结演讲稿
2014/08/27 职场文书
让子弹飞观后感
2015/06/11 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
python ansible自动化运维工具执行流程
2021/06/24 Python