当前位置: 首页 > 知识库问答 >
问题:

利用频率分析提高替换密码的精度

宗政博文
2023-03-14

所以,在我的C代码中,我用一个普通英语的文本文件,通过该文件分析英语字母表中字母的频率,并将它们存储到一个向量中。在获得频率后,我用英语字母表中频率最高的字母替换了以频率最高的字母开头的每个字母。我使用了“etaoinshrdlucmfwypvgbgkjqxz”“EOTHASINRDLUYMWFGCBPKVJQXZ”这样的字符串来表示字母表中最频繁的字母,然后我逐个查看最频繁的文本(按大于比较的向量排序),并用上面字符串中的字母替换它们。最终,这种天真方法的准确性取决于文件的大小;我想看看我是否能在保持这种方法的同时让它更准确。比如,在我再次浏览文本以替换新字母后,我得到一个新文件,其中包含新的(非真实的)单词。由于这种方法的准确性,如下所示

E 326 E
O 288 T
A 271 A
T 257 O
I 243 I
R 235 N
N 208 S
S 205 H
L 140 R
D 129 D
M 112 L
U 110 U
H 107 C
C 103 M
G 92 F
P 91 W
Y 73 Y
W 58 P
B 53 V
F 51 B
K 29 G
V 22 K
X 15 J
J 6 Q
Q 6 X
Z 1 Z

对于中等长度的文本,我得到的结果文本有

REANSISF FTARH  from LEARNING GOALS
REANS YTU A CAHGERR VY LINAS RIWTKAMA from Learn You a Haskell by Miran Lipovaca 

请注意有些单词是非常接近的。比如学习youby。沿着这些路线,我可以用我的方法用实际的单词替换这些拼写。那么,我如何才能提高准确性,使其至少接近原始文本的50%?我暂时只需要想法。无论是实现字典来查找常见的字母模式,还是使用地图作为C语言的字典,任何建议都将不胜感激。谢谢。

共有2个答案

古彦
2023-03-14

我最近为一个编程挑战解决了一个类似的问题,所以我不想透露太多,但我要说的是,我发现建立一个完整单词模式的词典比建立字母频率的词典更有成效。将一个单词转换成类似于转义的模式-

除此之外,这个问题还有许多有趣的挑战:识别死胡同,选择首先破译哪些单词,如何(以及是否)回溯,以及如何处理字典中似乎不存在的密码词,仅为少数几个。

相旭
2023-03-14

你基本上发现的是,当单词中使用的字母被正确替换时,“部分好”的解决方案已经正确地返回了这些单词。如果你把Q和X混在一起,这没有多大关系,这是一个真正的风险,因为它们都很罕见。

所以,作为接近度的衡量标准,你可以使用字典中出现的试图解密的单词数量。你会发现确实出现的单词中一些字母的出现率要高得多,而且这些字母可能是正确的。只要尝试“EATO”的所有12个顺序,你就会得到很多单词。

但是,你如何产生更多的假设呢?你第一次尝试就得到了一份订单。通过交换几乎同样常见的成对字母,可以产生合理的变化。从最常见的字母开始,这样你就有了更多的单词。

 类似资料:
  • 本网站(https://www.guballa.de/substitution-solver)他做到了。 我必须通过频率分析来做到这一点(https://en.wikipedia.org/wiki/Frequency_analysis) 我面临的主要问题是,当我替换时,检查单词是否看起来像英语单词。 请指导我如何处理这个问题 谢谢哈基德

  • 问题内容: 我正在设计一个简单的调谐器,所以我的目标是显示音符名称(A,B,F#)以及理论声音和实际输入之间的 距离( 以分为单位)。 我是音频和信号处理的新手,所以我做了一些研究,发现 了一个 叫做快速傅立叶变换 的东西 ,它可以分析字节并给我频率。另外,我发现了一些Java库,例如通用数学和JTransforms,所以我不会自己编写硬代码。 我相信就这样,因为每个范围的频率都可以以相同的气质直

  • 我目前正在F#中研究频率替换密码。也就是说,我计算了文本中每个字母的出现次数,完成后,我想根据英文字母表中的字母频率替换这些字母。 到目前为止,我所做的是创建了一个包含(字母、频率百分比、推荐字母)的(char*浮动*char)列表。假设字母P是我的加密文本中最常见的字母(13.5%的字母是P),而E是英语文本中最常用的字母,我们的列表元素看起来像这样(“P”,13.5,“E”)。这个过程完成了文

  • 本文向大家介绍如何利用FutureBuilder提高开发效率,包括了如何利用FutureBuilder提高开发效率的使用技巧和注意事项,需要的朋友参考一下 常见场景 展示请求按钮 用户点击按钮,显示loading 展示数据或者错误 抽象模式 展示请求按钮(初始状态) 用户点击按钮,显示loading(请求中状态) 展示数据或者错误 (结束状态(成功或失败)) 转换成程序语言 以上三种现实情况对应

  • 我正在使用mod安全规则https://github.com/SpiderLabs/owasp-modsecurity-crs清理用户输入数据。在将用户输入与mod security rule正则表达式匹配时,我面临着cpu激增和延迟。总的来说,它包含500个正则表达式来检查不同类型的攻击(xss、badrobots、generic和sql)。对于每个请求,我检查所有参数并对照所有这500个正则表