用python解决替换密码

时间:2011-04-07 20:34:14

标签: python substitution encryption

我知道有类似的问题,但这是一个微不足道的案例。

给定一个用替换密码编码的文本文件,我需要使用python解码它。我没有得到任何正确破译的单词的例子。关系是1对1,案例没有区别。此外,标点符号不会更改,空格会保留在原位。我不需要代码的帮助,因为我需要帮助,大致了解如何在代码中完成此操作。我的主要方法包括:

  1. 首先解决1个,2个或3个字符的单词,缩小选择范围。
  2. 我可以使用不同大小的英文单词列表进行比较。
  3. 我可以使用字母的频率分布。
  4. 有没有人知道我可以采取的一般方法来做到这一点?

3 个答案:

答案 0 :(得分:1)

我首先会得到一个英文单词列表供参考。接下来构建可能的2个和3个字母单词的列表。然后开始测试密码中的那些小字。一旦猜到一个小词,请检查单词列表中较大的单词。如果列表中的某些单词不再具有可能的完成,那么您的轨道错误。如果单词只有一个可能的完成,请接受它为正确并继续。最后,您要么找到一个解决方案,其中所有单词都在您的英语单词列表中,或者您将达到一个单词没有解决方案的点。

答案 1 :(得分:1)

我写了类似的内容,因为Haley's语音都是乱码。但它不是自动化的;它基于etaoinshrdlu(英语中最常用的字母,从最多到最少排序)进行猜测,并让用户以交互方式更改给定密文字母的含义。

所以它会告诉你类似的东西:

t0is is a 12eat 34556e!

你会手动猜出每个数字所代表的字母,直到你有一些清晰的东西。

这种方法的优点是它可以容忍拼写错误。如果您的加密器发生任何错误(或使用明文中不在您的字典中的任何单词),您可能会发现自己有一个难以解决的难题。

也就是说,拼写检查员有很多英文单词。我在Debian的dictionaries-common包中使用了hangman solver

答案 2 :(得分:1)

您可以尝试这种方法:

  1. 为您的语言(在列表中)存储有效字词列表(在字典中)和“正常”字母分布。

  2. 计算乱码文本中字母的分布。

  3. 将您的乱码分布与普通分布进行比较,并根据该格式重新定位您的文字。

  4. 重复:将所有26个字母的数组(等级)设置为float(rank('A')= rank('B')= ... = rank('Z')= 0.0)

  5. 根据词典中的单词检查生成的文本中的单词。如果单词在词典中,则提高该单词的字母等级(例如:添加标准值,比如说1.0)。换句话说,计算分数(字典中总排名和单词数量的函数)。

  6. 将文字保存到高分表(如果得分足够高)。

  7. 如果所有单词都在字典中,或者总排名足够高,或者循环次数超过10000次,则结束。

  8. 如果没有,请随机选择两个字母并互换。但是,如果偏离分布,那么排名较高的字母应该有较少的互换机会。

  9. 重复。

  10. 结束:打印高分文本。

  11. 该程序类似于Simulated Annealing