1

据我了解,如果您将 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 测试,但是我正在努力思考一种将文本分成列的算法,关于如何像计算机科学家一样思考并构建这样的算法的任何提示?

4

1 回答 1

2

如果您已经知道密钥长度,那就很简单了。如果您不知道密钥长度,则必须通过熵来猜测。例如,以下是 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个元素)

于 2014-10-20T11:07:58.433 回答