这是我目前正在学习的现代密码学课程。
挑战是 cryptopals challenge 3: Single-Byte XOR Cipher,我正在尝试使用 python 3 来帮助完成它。
我知道我应该对字符串进行异或并转换为英语。 The hex string is “1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736” which converts to “806748453371902409051174291875458592743800337585421566549206796642836053682239286” in decimal form.
我对多个十六进制字节组合(2 个十六进制数字)进行了异或运算,但我不知道如何将其转换为英文。在这一点上,这只是蛮力和有根据的猜测吗?
我知道 ETAOIN SHRDLU,但这并没有真正帮助。
感谢您的时间和帮助。
添加:此外,我尝试了挑战 #4,但这段代码似乎不起作用。但它确实适用于挑战#3,所以我很困惑。
原文由 Phillip Sloan 发布,翻译遵循 CC BY-SA 4.0 许可协议
基于@falsetru 的回答,但仅显示具有最多空格字符的解码字符串:
除了计算空格,您还可以使用 ETAOIN SHRDLU (“英语中 12 个最常用字母的近似频率顺序”)来计算权重,但此处没有必要。
顺便说一句,我认为如果你能 与挑战 联系起来就好了。
编辑: 或者,您可以尝试找到密钥(或一些最有希望的密钥),然后仅使用该密钥(或那几个密钥)进行解码。例如,假设计算空格数将决定获胜者:
这甚至可以很容易地手工完成(尽管挑战告诉你不要那样做)。