我需要做一個XOR的兩個十六進制字符串,以便每個字節單獨XORed,但它不起作用,因爲我使用的ord()
函數似乎越來越一個int
作爲輸入而不是預期的字符串。看看他的代碼首先要明白我的意思:Unhexlify似乎給我一個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'? – falsetru
對不起,這是一個錯字:D。儘管我的原始代碼沒有。 –