代码之家  ›  专栏  ›  技术社区  ›  Jishan

^:'str'和'int'异或解密的操作数类型不受支持

  •  -2
  • Jishan  · 技术社区  · 7 年前

    我尝试按如下方式解密单字节异或(按原样执行):

    from binascii import unhexlify
    
    if __name__ == "__main__":
    
        encoded = unhexlify("7f454c467f454c467f454c46")
        for key in range(256):
            decoded = ''.join(chr(b ^ key) for b in encoded)
            if decoded.isprintable():
                print(key, decoded)
    

    执行时出现以下错误:

    File "temp.py", line 8, in <module>
        decoded = ''.join(chr(b ^ key) for b in encoded)
    File "temp.py", line 8, in <genexpr>
        decoded = ''.join(chr(b ^ key) for b in encoded)
    TypeError: unsupported operand type(s) for ^: 'str' and 'int'
    

    2 回复  |  直到 7 年前
        1
  •  1
  •   Matthieu Brucher    7 年前

    使用 ord 在执行XOR之前将字符转换为整数。

    decoded = ''.join(chr(ord(b) ^ key) for b in encoded)
    
        2
  •  1
  •   ddor254    7 年前

    b 是字符串和 key

    如果你想用 ^ 你需要两个变量都是整数-你可以使用 ord(b) 它会解决你的问题。

    decoded = ''.join(chr(ord(b) ^ key) for b in encoded)