检测单字符XOR密码

时间:2017-01-24 21:02:02

标签: python python-3.x

  

this file中的60个字符的字符串之一已通过单字符XOR加密。

     

找到它。

     

#3的代码应该有帮助。)

挑战在于找到文件的哪一行是XOR加密的,什么是乱码。有一行是加密的。每行应该是60个字符(除了我找到一个58个字符行)。

出于某种原因,我在每行读取61个字符,58个字符行为59个字符,最后一行为60个字符。为什么是这样?我认为这是新行字符,但当我使用line[0:-1]时,我没有成功解密。

这是我的python代码:

import binascii

def XORBreak(h):
    en = binascii.unhexlify(h)
    for key in range(256):
        de = ''.join(chr(b ^ key) for b in en)
        if de.isprintable():
            print(de)

with open("TestFile_Challenge04_CSIS463.txt") as f:
    for line in f:
        XORBreak(line)

1 个答案:

答案 0 :(得分:0)

首先,您应该使用.strip删除空格(换行符等),例如:

for line in file
    xor_decrypt(line.strip())

而不是盲目地删除一行的最后一个字符。

现在,您的代码几乎可以正常运行,但由于某种原因无法找到正确的字符串:'\n' 可打印:

>>> '\n'.isprintable()
False

因此,包含换行符的任何字符串上的isprintable将返回False

您可以使用类似any(c.isprintable() or c == '\n' for c in de)的内容。