簡體   English   中英

python中的xor函數

[英]xor function in python

如果有人可以在python中使用XOR功能,我會很高興。

例如,我有兩個相當大的消息(大約300個符號),它們是用十六進制代碼寫的,我如何正確地對它們進行XOR? 我嘗試使用通用函數並將其轉換為其他類型,但我無法做到這一點(

我不知道我需要轉換哪種數據類型?

如果我的問題正確無誤,如果您有2個十六進制數字表示為字符串:

a = "e877a5e68bea88d61b93ac5ee0d562e8e9"
b = "23fe3231699ade23482"

您可以通過將其轉換為int並應用按位xor運算符來使用掩碼對它們中的任何一個進行異或:

xor_result = int(a, 16) ^ int(b, 16)

print '%x' % xor_result

並且,如果您想保留原始格式

string_xor_result = hex(xor_result)[2:]

遍歷字符串chars,然后將每個char轉換為int( int(a,16) ),然后應用xor,用hex轉換為hex,用[2:]去除開頭的“ 0x”,最后加入所有內容

stra = 'abc'
strb = 'abd'
''.join(hex( int(a,16) ^ int(b,16) )[2:] for a,b in zip(stra, strb))

請注意,正如注釋中指出的那樣,僅當兩個字符串的長度相同時,它才有效。 否則,較長字符串的一些字符將被忽略。

如果兩個字符串的長度不同,則可以添加一行cycle()

stra = raw_input("msg: ")
strb = raw_input("key: ")
strb = cycle(strb)

print ''.join(hex( int(a,16) ^ int(b,16) )[2:] for a,b in zip(stra, strb))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM