各バイトが個別に XOR されるように、2 つの 16 進文字列の XOR を実行する必要がありますが、使用する関数が意図した文字列ではなく as 入力を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 の値を確認したところ、何らかの理由で実際に整数になっていました。私の論理によれば、16進エンコードされた文字列を指定し、16進法を解除してから、各文字をqのスロットに貼り付けたため、文字列であると想定されているため、理由がわかりません。