0

我有两个十六进制字符串。我正在尝试将这些字符串转换为二进制并对它们进行异或。更改为二进制字符串是可行的,但是当我将它们异或在一起时,我会得到块状符号作为输出。

texts = []

texts.insert(0, '315c4eeaa8b5f8aaf9174145bf43e1784b8fa00dc71d885a804e5ee9fa40b16349c146fb778cdf2d3aff021dfff5b403b510d0d0455468aeb98622b137dae857553ccd8883a7bc37520e06e515d22c954eba5025b8cc57ee59418ce7dc6bc41556bdb36bbca3e8774301fbcaa3b83b220809560987815f65286764703de0f3d524400a19b159610b11ef3e')

texts.insert(1, '234c02ecbbfbafa3ed18510abd11fa724fcda2018a1a8342cf064bbde548b12b07df44ba7191d9606ef4081ffde5ad46a5069d9f7f543bedb9c861bf29c7e205132eda9382b0bc2c5c4b45f919cf3a9f1cb74151f6d551f4480c82b2cb24cc5b028aa76eb7b4ab24171ab3cdadb8356f')

def sxor(s1,s2):    
    return ''.join((chr(ord(a) ^ ord(b))) for a,b in zip(s1,s2))


if __name__== "__main__":
    # print as binary string
    print bin(int(texts[1], 16))[2:]
    # xor two binary strings
    result = sxor( bin(int(texts[1], 16))[2:] , bin(int(texts[0], 16))[2:]) 
    print result
4

1 回答 1

1

由于 xor 是按位运算(即,它适用于数字),因此您需要围绕实际操作进行解码和编码为十六进制。

return ''.join((chr(ord(a) ^ ord(b))) for a,b in zip(s1.decode('hex'),
  s2.decode('hex'))).encode('hex')
于 2013-09-11T23:32:47.240 回答