新学期有一门密码学课,课上老师布置了一道密码学题,题目如下:

  解密由仿射密码加密的密文“DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS”

  想解密这个密文,首先必须要知道仿射密码是什么:

  仿射密码是一种代换密码,加解密公式如下

  加密:$C=E([a,b],p)=(ap+b)\ mod\ 26$

  解密:$p=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 = []

  运行文件后依次打印出所有可能的明文。经过寻找,发现如下一行应当是所求的明文。

  读出明文应当为theres no business like show business。

使用Python解密仿射密码的更多相关文章

  1. 仿射密码Python实现

    算法分析 仿射密码结合了移位密码和乘数密码的特点,是移位密码和乘数密码的组合. 仿射密码的加密算法就是一个线性变化,即对明文字符x,对应的密文字符为y=ax+b(mod26)其中,a, b属于Z26且 ...

  2. 仿射密码-fanfie--affine

    仿射密码 仿射密码 是一种专情密码,一对一替换 ~~ 加密函数是 e(x) = ax + b (mod m) 其中a和m 互质,m是字母的数目. 解码函数是 d(x) = a^-1(x - b) (m ...

  3. NYOJ-770仿射密码,乘数密码与移位密码的结合;

    仿射密码 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 ->   Link   <- 和乘数密码差不多: 加密算法:Ek(m)=(k1*m+k2)%q;gcd(k ...

  4. convertto-securestring结果 使用python解密

    根据微软帮助文档,convertto-securestring有两种加密模式.如果在指定密码的情况下,则使用aes加密,否则使用windows dpapi加密.而且aes加密也没有指明iv值与加密模式 ...

  5. python 暴力破解密码脚本

    python 暴力破解密码脚本 以下,仅为个人测试代码,环境也是测试环境,暴力破解原理都是一样的, 假设要暴力破解登陆网站www.a.com 用户 testUser的密码, 首先,该网站登陆的验证要支 ...

  6. nyoj 仿射密码

    仿射密码 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 仿射密码是替换密码的另一个特例,可以看做是移位密码和乘数密码的结合.其加密变换如下: E(m)=(k1*m+k2) ...

  7. [源码]python Scapy Ftp密码嗅探

    [源码]python Scapy Ftp密码嗅探 原理很简单,FTP密码明文传输的 截取tcp 21端口User和Pass数据即可 Scapy框架编译程序较大(一个空程序都25M),所以就不提供exe ...

  8. Python解密网易云音乐缓存文件获取MP3

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:GeneralMonkey Python解密网易云音乐缓存文件获取MP3 ...

  9. Python凯撒密码加解密

    #凯撒密码第一个版本 #加密 pxpt=input("请输入明文文本:") for p in pxpt: if 'a'<=p<='z': print(chr(ord(' ...

随机推荐

  1. 去重函数unique,sort,erase的应用

    std::unique 一.总述 unique函数属于STL中比较常用函数,它的功能是元素去重.即"删除"序列中所有相邻的重复元素(只保留一个).此处的删除,并不 是真的删除,而是 ...

  2. 本地安装并运行http-server、browser-sync、webpack

    有一些自带命令的辅助开发.测试类的工具,官方都推荐全局安装,如果不想全局安装只想在某个项目下用该怎么办呢? 如http-server.browser-sync.webpack这种自带CLI的工具 使用 ...

  3. pdf去水印,pdf解密,pdf转MarkDown

    pdf去水印,在转Markdown文件 首先我们要有版权的敬畏之心,这里只是给大家介绍一下思路,请合理使用! 1.pdf去水印 下载:悦书PDF阅读器,注意免费免费!!!!(后期就不知道了,目前是免费 ...

  4. 循序渐进VUE+Element 前端应用开发(4)--- 获取后端数据及产品信息页面的处理

    在前面随笔<循序渐进VUE+Element 前端应用开发(3)--- 动态菜单和路由的关联处理>中介绍了在Vue + Element整合框架中,实现了动态菜单和动态路由的处理,从而可以根据 ...

  5. Java集合(八)哈希表及哈希函数的实现方式

    Java集合(八)哈希表及哈希函数的实现方式 一.哈希表 非哈希表的特点:关键字在表中的位置和它之间不存在一个确定的关系,查找的过程为给定值一次和各个关键字进行比较,查找的效率取决于和给定值进行比较的 ...

  6. centos6.4中文输入法

    在虚拟机中装了centos6.4之后,一直使用命令行,没有用到编辑器编辑中文或者浏览器中文搜索,所以没有注意到里边中文输入的重要性.在网上有看到说如果用的是中文版本应该有自带的中文输入法,然后用快捷键 ...

  7. 02 . Tomcat多实例并用Nginx反代

    Tomcat虚拟主机 ​ 一个应用程序在某一个端口启动运行产生了一系列的进程就是一个实例,让tomcat启动两个不同的相互独立的进程,产生两个不同的套接字,分别运行在不同的端口,让不同的端口响应不同的 ...

  8. 50个SQL语句(MySQL版) 问题八

    --------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...

  9. python调用大漠插件教程04鼠键事件及基本项目思维

    from win32com.client import Dispatch import os from random import uniform from time import sleep cla ...

  10. IC-二进制, 自然数, 有符号数

    https://mp.weixin.qq.com/s/9rGs9yN-OvLvEclnDZr87Q   零. 概念和结论 1. 数:概念名,指代物体的多少,即物体的量的概念: 2. 值:概念属性,数的 ...