簡體   English   中英

如何在Python中對十六進制字符串與空間進行異或

[英]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.

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