如何在python中用空格异或十六进制字符串

时间:2015-08-04 21:32:11

标签: python python-2.7

我有两个以十六进制表示的密文。我想用密文#2来密文#1。这部分可以通过xor_strings函数正常工作。然后,我想要对xor_strings返回的字符串中的每个字母用空格字符(其中ASCII码等于20的十六进制)进行xor。但是这部分不适合我,当我运行代码时,我得到了这个错误:

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

你能帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

使用您编写的正是这样的函数......

def xor_space(xored,binary_space):
    return xor_strings(xored," "*len(xored))

我也怀疑你可能不完全理解二元及其含义这个词

我不确定你的想法是什么a.decode("hex") ...但我很确定它没有按照你的想法行事(尽管我可能也错了)......

答案 1 :(得分:1)

由于您知道空格的序数值(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抱怨它不是单个字符。