使用Python解密仿射密码
新学期有一门密码学课,课上老师布置了一道密码学题,题目如下:
解密由仿射密码加密的密文“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解密仿射密码相关推荐
- python用表达式解密密文_基于Python解密仿射密码
新学期有一门密码学课,课上老师布置了一道密码学题,题目如下: 解密由仿射密码加密的密文"DBUHU SPANO SMPUS STMIU SBAKN OSMPU SS" 想解密这个密 ...
- Python实现仿射密码
仿射密码思路: 1.加解密公式: 2.构造对应字典: 3.代码实现 构造字典,建立映射关系: # 构造字典,'A' --> 0 ... def char_2_num(x):list_s = [] ...
- 仿射密码python_Python实现仿射密码的思路详解
仿射密码思路: 1.加解密公式: 2.构造对应字典: 3.代码实现 构造字典,建立映射关系: # 构造字典,'A' --> 0 ... def char_2_num(x): list_s = [ ...
- 仿射密码python_仿射密码加解密 python
参数选取:模数n=26+10=36,k2为学号后2位:k1为与学号后2位最近的素数. 加解密:加密自己名字的全拼,再解密. 密钥 k = (k1 , k2) 仿射密码加解密算法是: m:是输入的 ...
- 仿射密码解密(Affine Cipher)
仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母. A B C D E F G H I J K L M N O P Q R S T U V ...
- 仿射密码的加密与解密
目录 简介 密钥空间 加密函数 解密函数 乘法逆元 例题 加密: 解密: 代码(python版) 简介 仿射密码为单表加密的一种,字母系统中所有字母都藉一简单数学方程加密,对应至数值,或转回字母.它是 ...
- 仿射密码实验——Python实现(完整解析版)
文章目录 前言 实验内容 实验操作步骤 1.编写主程序 2.编写加密模块 3.编写解密模块 4.编写文件加解密模块 实验结果 实验心得 实验源码 scirpt.py usefile.py 前言 实验目 ...
- 信息安全之仿射密码加密和解密
本文利用仿射密码,对一个只含可打印字符的txt文件进行加密和解密. //加解密时,文件内容为所有可打印字符,即ASCII码从32-126的95个字符 #include<iostream> ...
- Python凯撒密码解密
Python 凯撒密码解密 简介 加密 解密 python程序. 其他参考文章 简介 在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人 ...
最新文章
- AI之最——地平线创始人兼CEO余凯谈AI
- 作为JavaScript开发人员,这些必备的VS Code插件你都用过吗?
- 信息系统项目管理知识--软件工程
- OSGi-入门篇之服务层(03)
- python利用cookie模拟登录
- WEB安全基础-HTML相关知识
- matlab将图片旋转的代码_【MATLAB】钟表
- 前端JavaScript开发中需要注意的代码问题
- unicode编码表_关于编码
- php对用户输入的非标准格式日期匹配
- application context not configured for this file于spring框架使用中的原因
- 关于MATLAB给多条曲线命名和划定网格
- 个人收集的IT技术网站集合,涉及web前后端,大数据,UI设计等。...
- 使用librosa库对音频信号进行采样以及分帧处理
- @linux下tar解压失败a lone zero解决方法
- SONiC(4)-Telemetry可视化
- mininet和ryu简单实现自定义topo
- mysql版网络验证自动发卡功能
- 倒计时2天:百度“文心一言”即将上线!
- 以STC的单片机为例A/D做按键扫描应用原理介绍
热门文章
- mac升级node版本(用n升级nodejs)
- Spring框架汇总(大学生的天堂 码农的圣殿)
- Swift使用UserDefaults存储,报错 Fatal error: ‘try‘ expression unexpectedly raised an error: Swift.Decoding
- django 配置微信JS接口安全域名文件MP_verify_HYY0KkfTzujsyGhW.txt
- 向量代数:向量加法、共线与共面
- dalao的背包九讲
- 前端开发工程师必备网站
- 微量小程序联盟,如何实现微信小程序换量和微信小程序推广?
- Codesys电子凸轮功能的设计与可视化仿真
- QA团队和测试团队的关系