现代密码学大作业(一):实现单表替换的频率分析(python3.7)
现代密码学大作业(一):实现单表替换的频率分析
(知识水平、技能能力有限,如有不足之处,还望多多批评指正)
单表代替是最基础的一种加密方式。在加密时用一张自制字母表上的字母来代替明文上的字母(比如说A——Z,B——D)来达到加密。移位密码也属于单表代替,只不过比较有规律,相当于集体向前或向后。这种加密方法最容易被破解。破解方法为统计法。在英语中,最常用的字母为E,所以在密文中代替E 的字母出现的频率也最高,由此便可破解。
与移位加密不一样,一般的单表替换密钥量比较大。
英语中有26个字母
密钥总量: =26!=26×25×⋯×2×1≈ 4.03291461×101 年=365×24×60×60=3.1536×10秒
天河二号机以每秒2.57千万亿次的速度来计算,若一 次运算能检验可能密钥中的一条,则检查完所有 的密钥并破解信息花费的时间大概是500年
公元九世纪,阿拉伯密码破译 专家,击破单表替换密码。
据大量分析发现,在具有一定量的英文文章中,字母的出现频率是一定的。
e:出现频率约为0.127
t,a,o,i,n,s,h,r:出现频率约在0.06到0.09之间
d,l:的出现频率约为0.04
c,u,m,w,f,g,y,p,b :出现频率约在0.015到0.028之间
所以,通过分析字母频率来解决单表替换成为了可能
《福尔摩斯 跳舞的小人》那一章中跳舞的小人就可以认为是一种单表替换密码
先给出用python3.7写出的频率分析程序
# -*- coding: utf-8 -*-s=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
b=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
f1=open("D:单表破译.txt","r+")message=f1.read()#读取文章sum=0#总数for i in message:if('A'<=i<='Z'):#只记录字母sum=sum+1#记录字母总数for j in range(0,26):if(s[j]==i):b[j]=b[j]+1
print(sum)#字母总数
print(b)#各个字母总数for i in range(0,26):result.append((b[i]/sum))print(s[i],":",(b[i]/sum)*100)
#打印频率
找到频率后,可先修改部分字母的对应关系,再根据上下文求出各个字母的对应关系。
下图是样例输出的情况
现代密码学大作业(一):实现单表替换的频率分析(python3.7)相关推荐
- 密码学大作业总结博客
密码学大作业总结 一.9.30 Question1 Many Time Pad(Coursera Week 1 Program Assignment) Question2 PA1 option Que ...
- XD现代密码学大作业-欧几里德及其扩展算法的实现
西电现代密码学大作业1-欧几里德及其扩展算法的实现 一.实验名称:欧几里德及其扩展算法的实现 二.实验原理:学习及其扩展算法. 三.实验目的: 四.实验内容: 五.实验器材(设备.元器件): 六.实验 ...
- NSSCTF刷题wp——单表替换密码
NSSCTF Crypto 模块 单表替换密码 [HGAME 2022 week1]Matryoshka ID:1855 打开Matryoshka.txt,发现是一堆点,看标签可能是Braille盲文 ...
- 单表置换密码java代码实现_单表替换密码
要求: 实现单表替换密码,用键盘接收明文和密钥,屏幕答应替换表和密文,大小写敏感,输入健壮性. 实际问题: 密钥处理应该是这个程序的重点,加密和解密都没有什么要注意的地方.用key[]数组接收keyt ...
- 密码学大作业(共三次)
第一次大作业 Many Time Pad #密文为十六进制字符串,应该先将其处理 ciphertexts = ["315c4eeaa8b5f8aaf9174145bf43e1784b8fa0 ...
- 密码学基础(二)单表---置换密码 凯撒密码 棋盘密码 乘法密码 仿射密码 多表---vigenere方阵
1古典密码 (1)置换密码 明文字母重新排列,字母本身不变,但是位置发生变化(倒序或者按照按照数组排列后以行或列重新组合) (2)代替密码 分为单表代替密码和多表代替密码 单表代替密码中代表性的 凯撒 ...
- 【2020-2021春学期】数据库作业5:单表查询例题练习
文章目录 单表查询 1.选择表中若干列 [例3.19]查询全体学生姓名和出生年份 [例3.20]查询全体学生姓名.出生年份.院系(用小写) 2.选择表中的若干元组 [例3.21]查询选修了课程的学生学 ...
- RSA常见攻击方式(西电网信密码学大作业)
题目:RSA大礼包 摘要: 实验要求: 使用截获的加密数据,根据RSA算法的非合规使用,参数选取不当等,破译出相关明文和参数,其中参数主要为p.q以及私钥d. 实验目的: 通过对已截获密文的破译,学习 ...
- 【计算机网络】 课程大作业:利用Wireshark抓包并进行分析
目录 一:任务目的 二:任务内容 三:提交形式及时间 四:步骤 五.感悟 一:任务目的 (1)了解计算机网络TCP/IP的分层实现过程,了解不同层次PDU的逐层封装与解封过程: (2)熟悉网络通信的实 ...
最新文章
- 为什么我害怕数据结构学得好的程序员?
- 在AI人工智能时代,大学或需要重新定位
- YourEclipse—不只是Eclipse开发者社区
- IP地址基础网络知识—Vecloud微云
- 民航资源网招聘出奇兵效法麦当劳
- python中gt是什么意思_python--gt;函数基础
- CRMEB 小程序版源码下载
- jquery如何获取checkbox,并判断是否选中
- SAP UI5 System Test 的工具之一:uiveri5
- mysql命令行如何建库_MySQL心得2--命令行方式建库和表
- [Objective-C语言教程]动态绑定(32)
- 【01】 课程介绍 - 计算机视觉概述
- ping端口怎么ping_英雄联盟手游ping信号怎么发送 ping信号发送方法介绍_游戏攻略...
- Python中fastapi构建的web项目使用.gitlab-ci.yml文件在KubeSphere中进行自动部署
- 3DS MAX的灯光
- oracle 启动报错03113,Oracle 入门之Oracle启动报错“ORA-03113”
- java 面单模板_顺丰电子面单JSON请求格式
- 蓝桥杯python青少年题目_蓝桥杯大赛青少组竞赛规则及样题
- 十六国帝王纪元表-20170722
- oracle和mysql查询条件排序_Oracle数据库中ORDERBY排序和查询按IN条件的顺序输出