1

当您知道密钥的长度但不知道密钥的长度时,我很难理解 Vigenere Cipher。如果我知道密钥,我可以破译文本,但我对如何计算出密钥的实际含义感到困惑。

举个例子,我得到了密文和 6 的密钥长度。这就是我得到的全部内容,我被告知密钥是任意一组字母,不一定要组成英语中的一个单词,换句话说,一组随机的字母。

有了这些知识,我到目前为止只将密文分解为 6 ​​个子文本,每个子文本都包含由密钥字母加密的字母,因此第一个子文本包含从第一个字母开始的每 6 个字母。第二个每 6 个字母以第二个字母开头,依此类推。

现在我该怎么做?

4

2 回答 2

1

您为键的每个字母计算一个字母频率表。如果如您的示例所示,密钥长度为 6,则您将获得 6 个频率表。你应该得到相似的频率,虽然不是相同的字母。如果不这样做,则您的密钥长度错误。

现在您检查英语的字母频率表(例如,参见http://en.wikipedia.org/wiki/Letter_frequency)。如果模式不匹配,则明文不是英文的。如果是这样,请将每个潜文本中最常见的字母分配给频率表等中最常见的字母,然后看看你得到了什么。请注意,您的文本的频率可能略有不同,参考表是基于大量数据的统计数据。现在你需要使用你的头。

使用常见的二字组(例如英语中的 th 和 sh)会有所帮助。

于 2013-10-20T19:30:41.277 回答
-2

一种方法是频率分析。取六组中的每一个,为每个字符建立一个频率表。然后将该表与明文的已知频率表进行比较(如果它是标准文本,那就是英语)。

第二种可能更简单的方法是暴力破解每个字符。可能的密钥数量为 26^6 ~= 300,000,000,大约是 29 位密钥空间。这是蛮力的,但在个人计算机上可能需要一些时间。但是,如果您一次暴力破解一个字符,则只需 26*6 = 156 次尝试。为此,请编写一个函数,对尝试解密的明文进行“评分”,以及它看起来“类似于明文”的程度。您可能会像上面那样进行频率分析,但可以进行更简单的测试。然后暴力破解这六组字符中的每一个,并选择最适合解密它们的关键字母。

于 2013-10-20T21:05:44.650 回答