Мне нужно выполнить XOR двух шестнадцатеричных строк, чтобы каждый байт подвергался XOR отдельно, но это не работает, потому что функция 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.
s1
,s2
вместоt1
,t2
? - person falsetru   schedule 11.07.2013