python - 如何制作一个python程序来解密没有密钥的凯撒密码?(频率分析)
问题描述
我不知道如何做到这一点,有人可以帮助我开始并指导我编写一个程序来解密凯撒加密文本。我有一个程序可以解密并打印所有 26 个班次,但我只想打印一个正确的班次,谢谢!
解决方案
在看到问题中提到“频率分析”一词后进行编辑。
您可以通过两种方式执行此操作,具体取决于您必须破译的文本类型。
频率分析 如果您的文本相当长,那么可以通过频率分析来完成。每个英文字母都有一定的出现频率(例如这里)。您知道加密文本中最常见的字母可能是 E、T 或 A。您可以一次替换一个字母,看看“单词”骨架是否开始出现。在文本被解密之前,这将是一个反复试验。或者,您可以根据“最近”匹配频率将加密文本中的字母与纯英文字母匹配。如果单词之间没有空格,您的任务将变得更加困难(但我想因为您正在处理简单的凯撒密码,所以这种可能性较小)。
查查英语词典
如果您没有足够长的文本或文本的字母使用模式与“通常”的英语有偏差,那么我会按照以下方式进行。请注意,此方法意味着您可以访问英语词典进行查找。
您可以将所有单词(为每个班次生成)输入英语词典查找。如果为每个单词找到匹配项,您可以给 +1 分,否则为 -1。正确的班次将有最高分。这更加自动化并且相对较少的试验和错误。
请注意,如果您的加密文本在单词之间没有空格,则此方法也需要进行调整。
请让我们更多地了解您拥有的加密文本类型以及您是否只需要使用频率分析。
推荐阅读
- ruby - Rails 嵌套属性验证强制首先保存父级
- spring - spring 有什么方法可以在 spring 中动态创建对象而不使用工厂模式
- javascript - 量角器>Package.json 配置> 在我的 mac book 中找不到 .bin 文件夹
- python - 芹菜没有排队到远程代理,而是将任务添加到本地主机
- android - 如何在android中将详细信息显示到组件中?
- python - 有没有办法使用 Python 连接到在线 mysql 数据库
- .net-core - 找不到方法:'System.Reflection.MethodInfo Microsoft.EntityFrameworkCore.Query.EntityQueryModelVisitor.get_SelectAsyncMethod()'
- android - 有没有办法在monkeyrunner项目中导入OpenCV?
- sirishortcuts - Siri快捷方式不打扰bug?
- python - 尽可能快地读入 HDF5 数据集