将 Vigenere Cipher 排列成列

Posted

技术标签:

【中文标题】将 Vigenere Cipher 排列成列【英文标题】:Arranging Vigenere Cipher into columns 【发布时间】:2014-10-17 11:33:23 【问题描述】:

据我了解,如果您将 Vigenere 密码排列成列,您可以使用巧合索引来找出密钥长度。 我正在努力编写一个将一段文本排列成列的算法。

例如 - 1 2 3 4 5 6 7 8 9 10

如果句号为 2,将返回这个 - 1,3,5,7,9 2,4,6,8,10

并对每个字符串执行 IOC 测试

如果周期是 3 - 1,4,7,10 2,5,8 3,6,9

并对每个字符串执行 IOC 测试

等等等等。 我已经构建了一个 IOC 测试,但是我正在努力思考一种将文本分成列的算法,关于如何像计算机科学家一样思考并构建这样的算法的任何提示?

【问题讨论】:

【参考方案1】:

如果您已经知道密钥长度,那就很简单了。如果您不知道密钥长度,则必须通过熵来猜测。例如,这是一个 Python 中的示例:

if you_dont_know_key_length:
    key_length = find_key_length_by_entropy(ciphertext)

columns = [ciphertext[i::key_length] for i in xrange(key_length)]

任何语言都应该具有基本相同的结构(选择密文中的每个第 n 个元素)

【讨论】:

以上是关于将 Vigenere Cipher 排列成列的主要内容,如果未能解决你的问题,请参考以下文章

C++ 链表凯撒密码 Vigenere Cipher

Vigenere-cipher 错误输出

Vigenere Cipher - 解密(手动)

Vigenere Cipher - 解密(手动)

PSET 2:Vigenere Cipher 部分工作?

vigenere cipher 的 C++ 函数仅有时有效(适用于某些输入,跳过其他输入)