[英]How to XOR hex string with space in python
我有2個密文表示的密文。 我想用密文#2對密文#1進行異或運算。 這部分通過xor_strings
函數可以正常工作。 然后,我想對xor_strings
返回的字符串中的每個字母與空格字符(其ASCII碼等於十六進制的20)進行異或。 但是這部分不適用於我,當我運行代碼時,出現此錯誤:
Traceback (most recent call last):
File "hexor.py", line 18, in <module>
xored_with_space=xor_space(xored,binary_space)
File "hexor.py", line 5, in xor_space
return "".join(chr(ord(xored) ^ ord(binary_space)) for x in xored)
File "hexor.py", line 5, in <genexpr>
return "".join(chr(ord(xored) ^ ord(binary_space)) for x in xored)
TypeError: ord() expected a character, but string of length 4 found
這是我正在運行的代碼:
def xor_strings(xs, ys):
return "".join(chr(ord(x) ^ ord(y)) for x, y in zip(xs, ys))
def xor_space(xored,binary_space):
return "".join(chr(ord(xored) ^ ord(binary_space)) for x in xored)
a=raw_input("enter first cipher \n")
b=raw_input("enter second cipher \n")
space="20" #hex ASCII value of space
#convert to binary
binary_a = a.decode("hex")
binary_b = b.decode("hex")
binary_space=space.decode("hex")
xored = xor_strings(binary_a, binary_b).encode("hex")
xored_with_space=xor_space(xored,binary_space)
print xored
print xored_with_space
您能幫我解決問題嗎?
使用您編寫的功能來完成此任務...
def xor_space(xored,binary_space):
return xor_strings(xored," "*len(xored))
我還懷疑您可能不完全理解二進制一詞及其含義
我不確定您認為a.decode("hex")
行為是什么...但是我很確定它沒有按照您的想法進行(盡管這也可能是我錯了)...
由於您知道空格的序數值( 0x20
或十進制32
),因此只需使用該值代替binary_space
:
def xor_space(xored):
return "".join(chr(ord(x) ^ 0x20) for x in xored)
但是,原始功能中的實際錯誤是由ord(xored)
引起的; 您打算將x
放在此處而不是xored
由於在這種情況下xored
的長度為4個字符串,因此ord
抱怨它不是單個字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.