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

  解密由仿射密码加密的密文“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。

 1 #encoding:utf-8
 2
 3 def NI(x,b): #定义求x关于b的逆元的函数NI,其中(NI(x,b)*x) mod b = 1 当x和b互质时求出的逆元唯一
 4     i = 1
 5     while (x*i)%b != 1:
 6         i = i + 1
 7     return i
 8
 9 c = "DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS"
10 C = []
11
12 #对密文进行预处理并储存在列表中,储存形式是对应字母在26个英文字母中的位序
13 for i in c:
14     if i == ' ':
15         C.append(i)
16     else:
17         C.append(ord(i)-65)
18
19 #将加密算法中a可能的取值储存在列表中
20 a = [3,5,7,9,11,15,17,19,21,23,25]
21 P = []
22
23 for keyb in range(0,26):
24     for keya in a:
25         ni_a = NI(keya,26)
26         for s in C:
27             if s == ' ':
28                 P.append(' ')
29             else:
30                 P.append(((s-keyb)*ni_a)%26) #将明文字母对应的位次码依次加入到明文列表中
31         strP = ''
32         for t in P:
33             if t==' ':
34                 strP = strP + ' '
35             else:
36                 strP = strP + chr(t+97) #将明文转化为字符串并输出
37         print(strP)
38         P = []

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

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

转载于:https://www.cnblogs.com/chester-cs/p/11574237.html

使用Python解密仿射密码相关推荐

  1. python用表达式解密密文_基于Python解密仿射密码

    新学期有一门密码学课,课上老师布置了一道密码学题,题目如下: 解密由仿射密码加密的密文"DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS" 想解密这个密 ...

  2. Python实现仿射密码

    仿射密码思路: 1.加解密公式: 2.构造对应字典: 3.代码实现 构造字典,建立映射关系: # 构造字典,'A' --> 0 ... def char_2_num(x):list_s = [] ...

  3. 仿射密码python_Python实现仿射密码的思路详解

    仿射密码思路: 1.加解密公式: 2.构造对应字典: 3.代码实现 构造字典,建立映射关系: # 构造字典,'A' --> 0 ... def char_2_num(x): list_s = [ ...

  4. 仿射密码python_仿射密码加解密 python

    参数选取:模数n=26+10=36,k2为学号后2位:k1为与学号后2位最近的素数. 加解密:加密自己名字的全拼,再解密. 密钥 k = (k1 , k2) 仿射密码加解密算法是:    m:是输入的 ...

  5. 仿射密码解密(Affine Cipher)

    仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母. A B C D E F G H I J K L M N O P Q R S T U V ...

  6. 仿射密码的加密与解密

    目录 简介 密钥空间 加密函数 解密函数 乘法逆元 例题 加密: 解密: 代码(python版) 简介 仿射密码为单表加密的一种,字母系统中所有字母都藉一简单数学方程加密,对应至数值,或转回字母.它是 ...

  7. 仿射密码实验——Python实现(完整解析版)

    文章目录 前言 实验内容 实验操作步骤 1.编写主程序 2.编写加密模块 3.编写解密模块 4.编写文件加解密模块 实验结果 实验心得 实验源码 scirpt.py usefile.py 前言 实验目 ...

  8. 信息安全之仿射密码加密和解密

    本文利用仿射密码,对一个只含可打印字符的txt文件进行加密和解密. //加解密时,文件内容为所有可打印字符,即ASCII码从32-126的95个字符 #include<iostream> ...

  9. Python凯撒密码解密

    Python 凯撒密码解密 简介 加密 解密 python程序. 其他参考文章 简介 在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人 ...

最新文章

  1. AI之最——地平线创始人兼CEO余凯谈AI
  2. 作为JavaScript开发人员,这些必备的VS Code插件你都用过吗?
  3. 信息系统项目管理知识--软件工程
  4. OSGi-入门篇之服务层(03)
  5. python利用cookie模拟登录
  6. WEB安全基础-HTML相关知识
  7. matlab将图片旋转的代码_【MATLAB】钟表
  8. 前端JavaScript开发中需要注意的代码问题
  9. unicode编码表_关于编码
  10. php对用户输入的非标准格式日期匹配
  11. application context not configured for this file于spring框架使用中的原因
  12. 关于MATLAB给多条曲线命名和划定网格
  13. 个人收集的IT技术网站集合,涉及web前后端,大数据,UI设计等。...
  14. 使用librosa库对音频信号进行采样以及分帧处理
  15. @linux下tar解压失败a lone zero解决方法
  16. SONiC(4)-Telemetry可视化
  17. mininet和ryu简单实现自定义topo
  18. mysql版网络验证自动发卡功能
  19. 倒计时2天:百度“文心一言”即将上线!
  20. 以STC的单片机为例A/D做按键扫描应用原理介绍

热门文章

  1. mac升级node版本(用n升级nodejs)
  2. Spring框架汇总(大学生的天堂 码农的圣殿)
  3. Swift使用UserDefaults存储,报错 Fatal error: ‘try‘ expression unexpectedly raised an error: Swift.Decoding
  4. django 配置微信JS接口安全域名文件MP_verify_HYY0KkfTzujsyGhW.txt
  5. 向量代数:向量加法、共线与共面
  6. dalao的背包九讲
  7. 前端开发工程师必备网站
  8. 微量小程序联盟,如何实现微信小程序换量和微信小程序推广?
  9. Codesys电子凸轮功能的设计与可视化仿真
  10. QA团队和测试团队的关系