现代密码学大作业(一):实现单表替换的频率分析

(知识水平、技能能力有限,如有不足之处,还望多多批评指正)

单表代替是最基础的一种加密方式。在加密时用一张自制字母表上的字母来代替明文上的字母(比如说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)相关推荐

  1. 密码学大作业总结博客

    密码学大作业总结 一.9.30 Question1 Many Time Pad(Coursera Week 1 Program Assignment) Question2 PA1 option Que ...

  2. XD现代密码学大作业-欧几里德及其扩展算法的实现

    西电现代密码学大作业1-欧几里德及其扩展算法的实现 一.实验名称:欧几里德及其扩展算法的实现 二.实验原理:学习及其扩展算法. 三.实验目的: 四.实验内容: 五.实验器材(设备.元器件): 六.实验 ...

  3. NSSCTF刷题wp——单表替换密码

    NSSCTF Crypto 模块 单表替换密码 [HGAME 2022 week1]Matryoshka ID:1855 打开Matryoshka.txt,发现是一堆点,看标签可能是Braille盲文 ...

  4. 单表置换密码java代码实现_单表替换密码

    要求: 实现单表替换密码,用键盘接收明文和密钥,屏幕答应替换表和密文,大小写敏感,输入健壮性. 实际问题: 密钥处理应该是这个程序的重点,加密和解密都没有什么要注意的地方.用key[]数组接收keyt ...

  5. 密码学大作业(共三次)

    第一次大作业 Many Time Pad #密文为十六进制字符串,应该先将其处理 ciphertexts = ["315c4eeaa8b5f8aaf9174145bf43e1784b8fa0 ...

  6. 密码学基础(二)单表---置换密码 凯撒密码 棋盘密码 乘法密码 仿射密码 多表---vigenere方阵

    1古典密码 (1)置换密码 明文字母重新排列,字母本身不变,但是位置发生变化(倒序或者按照按照数组排列后以行或列重新组合) (2)代替密码 分为单表代替密码和多表代替密码 单表代替密码中代表性的 凯撒 ...

  7. 【2020-2021春学期】数据库作业5:单表查询例题练习

    文章目录 单表查询 1.选择表中若干列 [例3.19]查询全体学生姓名和出生年份 [例3.20]查询全体学生姓名.出生年份.院系(用小写) 2.选择表中的若干元组 [例3.21]查询选修了课程的学生学 ...

  8. RSA常见攻击方式(西电网信密码学大作业)

    题目:RSA大礼包 摘要: 实验要求: 使用截获的加密数据,根据RSA算法的非合规使用,参数选取不当等,破译出相关明文和参数,其中参数主要为p.q以及私钥d. 实验目的: 通过对已截获密文的破译,学习 ...

  9. 【计算机网络】 课程大作业:利用Wireshark抓包并进行分析

    目录 一:任务目的 二:任务内容 三:提交形式及时间 四:步骤 五.感悟 一:任务目的 (1)了解计算机网络TCP/IP的分层实现过程,了解不同层次PDU的逐层封装与解封过程: (2)熟悉网络通信的实 ...

最新文章

  1. 为什么我害怕数据结构学得好的程序员?
  2. 在AI人工智能时代,大学或需要重新定位
  3. YourEclipse—不只是Eclipse开发者社区
  4. IP地址基础网络知识—Vecloud微云
  5. 民航资源网招聘出奇兵效法麦当劳
  6. python中gt是什么意思_python--gt;函数基础
  7. CRMEB 小程序版源码下载
  8. jquery如何获取checkbox,并判断是否选中
  9. SAP UI5 System Test 的工具之一:uiveri5
  10. mysql命令行如何建库_MySQL心得2--命令行方式建库和表
  11. [Objective-C语言教程]动态绑定(32)
  12. 【01】 课程介绍 - 计算机视觉概述
  13. ping端口怎么ping_英雄联盟手游ping信号怎么发送 ping信号发送方法介绍_游戏攻略...
  14. Python中fastapi构建的web项目使用.gitlab-ci.yml文件在KubeSphere中进行自动部署
  15. 3DS MAX的灯光
  16. oracle 启动报错03113,Oracle 入门之Oracle启动报错“ORA-03113”
  17. java 面单模板_顺丰电子面单JSON请求格式
  18. 蓝桥杯python青少年题目_蓝桥杯大赛青少组竞赛规则及样题
  19. 十六国帝王纪元表-20170722
  20. oracle和mysql查询条件排序_Oracle数据库中ORDERBY排序和查询按IN条件的顺序输出

热门文章

  1. 怎么在计算机中搜索可移动硬盘,电脑如何识别移动硬盘
  2. 不定积分——1/(1+x^4)的不定积分
  3. 宁强天津中学2021高考成绩查询,宁强县天津高级中学教务信息网
  4. jquery editplus
  5. 第二篇 简洁但功能强大的EditPlus——我的最爱
  6. 语义分割之边缘准确率提升
  7. 前端调用微信扫一扫不触发事件,没有任何反应
  8. Android7.1.1 remap鼠标右键为返回键
  9. 毕业论文必备技巧:Word页脚及页眉设置
  10. 一部分使用CNES后处理BIA产品的PPP-AR结果