关于如何解决这个问题的一般想法,不考虑 python:
让我们先说一个 char 是 8 位 ascii
如果您查看第一个密文形式的第一个字符,您可能会注意到它在纯文本的 ascii 值之外,可以说是 az 0x61-0x7a AZ 0x41-0x5a
很有可能您只需要考虑与此字符异或的值,使其在指定值范围内
其他 9 个文本及其各自的第一个字符也是如此
而且,有趣的是,这个字符的可能键值列表必须为每个具有相同密钥的密文保留,因此我们查看的每一个密文都进一步缩小了范围
现在,你可以用这种方法做什么?
编写一个接受 2 个参数(字节)的函数,并测试 xor 的结果是否在指定范围内,如果是,则返回 1,如果不是,则返回 0
现在做 3 个嵌套循环来调用这个函数
外循环 (X) 遍历密文中的字符位置 中间循环 (Y) 从 0 到 255 内循环 (Z) 遍历密文
在内部循环中调用您的函数,参数 1 是 Z 密文的 X 字符,参数 2 是 Y
现在如何处理结果:
你想要一个字典/查找表,每个位置 X 包含 255 个元素的数组
这些元素的索引将是 Y 这些元素的值将是所有 Z 的函数结果的总和
最后,对于密文中的每个位置,您将拥有一个数组,该数组告诉您每个密钥字节它是密钥的可能性……值越高,成为密钥字节的概率就越高
然后对于密文中的每个位置,按概率对可能的密钥字节进行排序,并按概率对它们进行分区
然后取一大块所有密文,假设前 8 到 16 个字符,并计算最高概率组中所有密钥的明文
将密钥块和明文块一起存储在列表中
现在根据普通字典测试您可能的明文列表,如果它们包含可以在字典中找到的单词,则再次为它们评分 1,否则为 0...总结所有不同的密文...(或使用另一个指标来评分钥匙有多好)
按最高值对密钥块排序(阅读:可能解决所有密文中最多块的密钥首先出现,产生垃圾的密钥最后)并继续下一个块......
用更大的块重复此操作,不选择密钥字节,而是选择下一个较小大小的密钥块,直到您的块大小达到密文大小......
当然,这是一种查找可能密钥的自动化方法,在您获得完全自动化的解决方案之前,还有一些实施工作。如果您只想解决这 10 个密文,您可以在可能的密钥字节或第一个块之后中止该方法,并手动完成其余的...