我需要对两个十六进制字符串进行异或,以便每个字节单独进行异或,但它不起作用,因为ord()
我使用的函数似乎是int
作为输入而不是预期的字符串。先看看他的代码,看看我的意思:
from binascii import hexlify, unhexlify
def xor_hexstr(s1, s2):
if len(s1) > len(s2):
q = zip(unhexlify(s1[:len(s2)]), unhexlify(s2))
return hexlify("".join(chr(ord(c1) ^ ord(c2)) for c1, c2 in q))
else:
q = zip(unhexlify(s2[:len(s1)]), unhexlify(s1))
return hexlify("".join(chr(ord(c1) ^ ord(c2)) for c1, c2 in q))
t1 = "0ec17c9dabb8955c5dfb9cef627ddb4d"
t2 = "4ca00ff4c898d61e1edbf1800618fb28"
xor_hexstr(t1, t2)
我得到的错误是:
TypeError: ord() expected string of length 1, but int found
然后我检查了 q 的值,由于某种原因,它们确实是整数。我不明白为什么,因为根据我的逻辑,它们应该是字符串,因为我给了它一个十六进制编码的字符串,将其解开,然后将每个字符插入 q 中的一个槽中。