我正在解密旧文本,我想要一个快速算法来检查长字符串中是否有来自字典的有意义的单词。这样我可以判断一个特定的密钥是否有效。
所以,使用字典预处理和大表可以,但是在大约25-50个字符上尽可能快。
谢谢!
我知道语言(意大利语),但文字没有空格,也许有几个随机字母。像:
TANKSSEENNEARUDINEYESTERDAY
密码是一种奇怪的柱状转置,因此单字母频率是固定的。
答案 0 :(得分:4)
密码学中的标准方法不是检查字典,而是检查明文(假设)语言的概率模型。例如,三字母的简单统计,即其他三个字符的序列,显着不同,例如在英语和胡言乱语之间。 (在英语中,“THE”是最常见的三字形。同样,像“CXC”这样的三字母根本不会出现在英语中。)
例如,可以通过使用简单的自相关方案推断密钥长度然后根据基础明文语言的语言统计信息搜索实际密钥来破解Vigenere密码。当我在大学讲授密码学时,我甚至为演示目的实施了程序......:)
使用这些类型的概率/马尔可夫模型的好处是,它们也能容忍恰好在特定字典之外的单词,或者有错别字,或者是替代或古老的形式。
答案 1 :(得分:3)
如果没有更多细节,我可能会将字典编码为trie,并尝试匹配haystack字符串中的每个位置。如果您不了解尝试,那么它是快速字典查找的最佳结构。
答案 2 :(得分:0)
您需要缩小范围。想一想。如果你有很长的单词,比如20-30个字符,那么你需要在这个字符串中所有子串的所有不同的排列,并将它们与字典进行比较。那将是非常繁重的计算。此外,如果你有很多这些长话,那么除非你在集群或其他东西上运行它,否则它将非常困难。