原题:
使用频率分析法,尝试破译密文:

WB WI KJB MK RMIT BMIQ BJ RASHMWK RMVP YJERYRKB MKD WBI IWOKWXWVMKVR MKDIJYR YNIB URYMWK NKRASHMWKRD BJ OWER M VJYSHRBR RASHMKMBWJK JKR CJNHD
PMER BJ LR FNMHWXWRD MKD WKISWURD BJ INVP MK RABRKB BPMB PR VJNHD URMVP
BPR IBMBR JX RKHWOPBRKRD YWKD VMSMLHR JX URVJOKWGWKO IJNKDHRII IJNKD MKDIPMSRHRII IPMSR W DJ KJB DRRY YTIRHX BPR XWKMH MNBPJUWBT LNB YT
RASRUWRKVR CWBP QMBM PMI HRXB KJ DJNLB BPMB BPR XJHHJCWKO WI BPR SUJSRU
MSSHWVMBWJK MKD WKBRUSURBMBWJK W JXXRU YT BPRJUWRI WK BPR PJSR BPMB BPR
RIIRKVR JX JQWKMCMK QMUMBR CWHH URYMWK WKBMVB

英文语言基于其固有的单词构成体系和词汇使用的频度,使得构成英文文章的字母出现的频率是相对固定的,如下:

在仅仅知道密文是由明文字母一一对应转换而不知道具体的对应方式时,即可通过统计密文中字母出现频率来模拟整个英文体系的字母频率分布,即将密文视为样本,以样本的参数估计整体参数,将密文中频率分布的字母与整体的频率分布字母进行替换。当然,这种估计是有误差存在的,但是基于英文书写的特点(常用单词、语法特征、短语搭配等)与英文单词构成,我们可以在估计的基础上进一步猜测和修正,进而破解出整个密文段。
下面以题目实例说明:
1、统计密文字母出现频率并按照出现频率大小与英文体系中字母出现频率大小进行替换,初步解密:

clear
close all
clc
% May 20 2020
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%英文字母出现个数频率统计
alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZ ';
count=zeros(1,27);
string=input('请输入英文片段 string=');
N=length(string);
for i=1:Nfor j=1:27if string(i)==alphabet(j)count(j)=count(j)+1;breakendend
end
N=N-count(27);
count=count/N;
count=count(1:26);
% bar(1:27,count)
tick1={'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'};
subplot(211)
bar(categorical(tick1),count);
[w,index]=sort(-count);
tick2=tick1(index);
count=-w(index);
subplot(212)
bar(categorical(tick2),count);
set(gca,'xticklabel',tick2)
code1=[];
for i=1:26cell=tick2(i);s=cell2mat(cell);code1=[code1,s];
end
tick3={'E';'T';'A';'O';'I';'N';'S';'H';'R';'D';'L';'C';'U';'M';'W';'F';'G';'Y';'P';'B';'V';'K';'J';'X';'Q';'Z'};
code2=[];
for i=1:26cell=tick3(i);s=cell2mat(cell);code2=[code2,s];
end
suptitle('字母频率统计结果')
result=[];
for i=1:length(string)if string(i)==' 'result=[result,' '];elseind=find(code1==string(i));result=[result,code2(ind)];end
end
result



2、在初步替换的结果的基础上,考虑到密文样本较小,字母出现频率与英文的统计频率会有偏差,根据常见的单词组合,常见的词缀组合,初步纠正解密结果,纠正时所替换的字母频率首先考虑原字母频率次序附近的字母。

比如ao->an,aod->and,tn->to,meot->ment等等,可见实际的对应关系应该为o->n,n->o,而o,n出现频率也确实是相近的,因此有比较高的把握认为,这样纠正是正确的。除了o->n,n->o,初次纠正的对应的关系还有j->v,
v->b,u->c,y->x等等。这里记录的新的变换对应记录下来,再次纠正其他单词时,优先考虑。

3、初次纠正的结果还是有一些“说不通”的地方,在此基础上,根据单词的相似性(单词长度,相同字母个数,不同字母所在频率次序的接近程度)、上下文的语境,语法组合等等,进一步精准纠正。比如原来的EYLRAIO,在已知修正对替y->x,o->n替换后为:exlrain,其相近的单词让人连续到:explain
将explain换到原文语境确实可以说得通,两个单词相似程度也较高,因此认为这个替换是正确的把握较高,选择替换。
同时记录这次新替换的变化对 l->p,r->l,不断更新我们的变化对,在后续继续替换时优先考虑。
按照这个思路:
最终解密的结果为:
it is not an easy task to explain each movement and its significance and some must remain unexplained to give a complete explanation one would have to be qualified and inspired to such an extent that he could cease the state of enlightened mind capable of recognizing soundness sound and shapeless shape i do not deem myself the final authority
but my experience with kata has left no doubt that the following is
the proper application and interpretation i offer my theories in the
hope that the essence of okinawa karate will remain intact
翻译:
要解释每一个动作及其意义并非易事,有些动作必须解释不清,才能作出完整的解释,一个人必须具备资格,并受到鼓舞,以至于他能够停止那种能够认识到健全、健全和不成形的心智状态,我不认为自己是最终的权威,但我对空手道的经验使我确信以下是我所提出的理论的正确应用和解释,希望冲绳空手道的精髓能保持原样

由文章中英文字母出现频率分析破解密文相关推荐

  1. 英语字母表计算机,计算机汇编课程设计CCCC.pdf_给定一个英文ascii码文件,统计文件中英文字母的频率,以十进制形式输出。,wwwwwxxxxx...

    1.给定一个英文ASCII码文件,统计文件中英文字母的频率,以十进制形式输出. 2.用递归计算n!(n≥50), 以十进制数输出 输入一个不小于50的整数n,用递归计算n!, 以十进制数输出 3.存储 ...

  2. 统计文章中字母出现频率

    代码位置:https://github.com/Evilleon/article-vocabulary/letter 转载于:https://www.cnblogs.com/YXSZ/p/108099 ...

  3. 统计分析文章中英文单词出现次数及频率(C++实现)

    设计思路: 1.为了统计数据具有实际意义: <1>统计中需要剔除一些无统计意义的词,例如 am is are 等虚词.代词.连词等. <2>一般的文章句首单词首字母为大写,此时 ...

  4. 古代密码学破解方式-频率分析法

    古代密码学破解方式-频率分析法

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

    现代密码学大作业(一):实现单表替换的频率分析 (知识水平.技能能力有限,如有不足之处,还望多多批评指正) 单表代替是最基础的一种加密方式.在加密时用一张自制字母表上的字母来代替明文上的字母(比如说A ...

  6. 【音频处理】Polyphone 样本编辑 和 样本工具 ( 波形图 | 信息 | 频率分析 | 均衡器 | 播放器 | 终点裁剪 | 自动循环节 | 空白移除 | 音量 平衡 音调 调整 )

    文章目录 一. Polyphone 工具简介 1. 相关参考资料 2. 简要介绍 (1) 软件界面 二. 音源编辑 1. 波形图 ( 1 ) 波形图样式 ( 2 ) 波形图操作 2. 信息 ( 1 ) ...

  7. 字母出现频率c语言,统计字母的使用频率c语言实现

    void main(){char ch; // ch用于一次接收一个字符int i,s [26] = {0}; //数组s []用于计算每个小写字母printf的数量("请输入一个字符串: ...

  8. 四十、SPSS数据汇总,图表制作,频率分析和描述分析

    @Author : By Runsen @Date:2020/5/14 在2020年一月初,也是我大三上的寒假,我开始写书,为什么呢?因为化工原理和化工热力学挂了,我需要重拾自己的自信. 对于一个大学 ...

  9. c语言输入一串字符统计各字母出现次数,统计输入字符各个字母出现频率的解题思路...

    本文跟大家分享的是编写一个程序,能够计算输入字符各个字母出现的频率,具体如下 先跟大家展示一下最终结果: 刚刚接手题目的时候,我想得很复杂,因为26个字母中有大小写嘛,小写a~z,大写A~Z 但是,无 ...

最新文章

  1. SQL SERVER 2000写存储过程出现列名无效的解决方法
  2. 前端学HTTP之网关、隧道和中继
  3. Asp.net中Postback及Callback
  4. MySQL 8.0 Server层最新架构详解
  5. NLP 训练及推理一体化工具(TurboNLPExp)
  6. ORBSLAM2在Ubuntu14.04上详细配置流程
  7. x264_sps_init
  8. Scala函数式对象-有理数
  9. smarty的配置与安装
  10. pip下载 离线安装第三方包
  11. Word中的文字如何上下(垂直)居中?
  12. 利用百度智能云-文字识别 auto.js
  13. R语言 判别分析:线性判别、K最邻近、有权重的K最邻近、朴素贝叶斯
  14. 揭秘手机游戏厂商怎么赚钱的。
  15. IPV6----升级点,地址分类及部分协议配置
  16. WSL嵌入式开发系列教程 4 —— 安装VS code
  17. ACM--South Pacific 2012
  18. Spring Web项目
  19. 智源社区周刊:AlphaFold蛋白质宇宙扩展到2亿结构;对话清华代季峰:自动驾驶感知新时代...
  20. 小米扫地机器人充电座指示灯不亮_小米扫地机器人充电多久可以用 怎么充电?...

热门文章

  1. Apache 的 httpd.conf 注释
  2. 合理利用Viz Artist脚本中的数组Array
  3. MySQL1【个人学习笔记】
  4. 权限管理(药品集中采购系统为例子)
  5. python编程语言优缺点_Python和PHP的优缺点对比
  6. matlab rtw在哪,MATLAB_RTW__Engine操作步骤.doc
  7. 色品Chromaticity
  8. 用自然语言进行编程的时代真的要来了
  9. css 水平+垂直居中
  10. 李沐动手学深度学习pytorch :问题:找不到d2l包,No module named ‘d2l’