對於密碼學應用程序,我正在讀取表示十六進制(「36E06921」,「27EA3C74」)的字符串,並且需要將它們異或並返回一個結果str ( 「110A5555」)。我能夠通過字符異或char來獲得小數結果,但是在得到結果的ascii表示法時遇到問題。所以,0x3 xor 0x3 = 0x0。什麼是最好的方法來獲得值0到ASCII值0x30?十六進制數字(0-15)並返回ASCII表示
在執行當前的嘗試:
def xor_hexstrings(xs, ys):
bin_x = binascii.unhexlify(xs)
bin_y = binascii.unhexlify(ys)
hex_str = ""
for x,y in zip(xs, ys):
# fails, with error TypeError: 'int' does not support the buffer interface
xored = binascii.b2a_hex(int(x, 16)^int(y, 16))
hex_str += xored
return None
編輯:關閉,唯一的問題是零。以下示例顯示推薦的解決方案返回零的空字符串。
>>> hex(int('0', 16)).lstrip("0x")
''
>>> hex(int('1', 16)).lstrip("0x")
你不能只對XOR單個字符進行異或,因爲它們並不全都在連續的範圍內。您需要將十六進制轉換爲int,xor,然後再將int轉換爲十六進制。 –
示例添加顯示即時通訊不只是xoring ascii值。 –
要將每個數字轉換回十六進制,只需使用'hex(digit)'並在開始處去掉'0x'。 –