如果密钥长度已知,则确定Vigenere密码的密钥

时间:2013-10-20 14:31:08

标签: cryptography vigenere

当你知道钥匙的长度但不知道钥匙的长度时,我正在努力绕过Vigenere Cipher。如果我知道密钥,我可以解密文本,但是我很困惑如何弄清楚密钥究竟是什么。

举一个例子,我给了密文和密钥长度为6.这就是我给的全部,我被告知密钥是一组任意字母,不一定要在英语,换句话说,是一组随机的字母。

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

我现在该怎么办?

2 个答案:

答案 0 :(得分:1)

您为密钥的每个字母计算一个字母频率表。如果您的示例中密钥长度为6,则可以获得6个频率表。您应该获得类似的频率,但不是相同的字母。如果不这样做,则密钥长度错误。

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

使用常见的数字库(例如英语中的th和sh)可以提供帮助。

答案 1 :(得分:-1)

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

第二种,可能更简单的方法是对每个角色进行暴力破解。可能的密钥数量是26 ^ 6~ = 300,000,000,大约是29位的密钥空间。这是蛮力的,但可能需要一些时间在个人电脑上。但是如果你一次暴力强制一个角色只需要26 * 6 = 156次尝试。为此,编写一个功能,将“尝试解密的明文”“评分”,看起来像“纯文本”。您可以像上面那样进行频率分析,但可以进行更简单的测试。然后对六组字符中的每一组进行暴力破解,并选择最适合解密其中每一个字符的关键字母。