Python XOR错误

时间:2015-01-02 16:32:25

标签: python python-3.x xor bits

所以这是一些曾经用于处理它的代码,但是当我试图将它实现到我的代码中时,它给了我一个错误,我想它是因为我突变了s2里面的位是没有binascii.a2b_qp的XOR s3的其他方法

def xor(s1,s2):
    s3 =''.join(chr(i^j) for i,j in zip(s1,s2))
    s4 = binascii.a2b_qp(s3)
    s5 = ''.join(chr(i^j) for i,j in zip(s2,s4))
    print(s5)

# for testing:
# additional info, s1 is a mutated form of bits from s2 using an S box
s1 = b'\xc3\xbf\x00\x00\xc3\xbf\x00\xc3\xbf\x00\x00'
s2 = b'aaaaaaaa'
xor(s1, s2)

回溯:

Traceback (most recent call last): 
  File "C:\Users\Pavilion g7\workspace\Python Network\RW.py", line 138, in <module> 
    x= xor(m1,m2) 
  File "C:\Users\Pavilion g7\workspace\Python Network\RW.py", line 69, in xor 
    s4 = binascii.a2b_qp(s3) 
ValueError: string argument should contain only ASCII characters

1 个答案:

答案 0 :(得分:2)

正如已经评论的那样,chr()返回一个字符串。

this question中,您可以获得有关如何替换它的建议。

同样地,您不应.join()使用'',空字符串,但使用b'',空字节对象。

示例:

def bchr(i):
    return bytes([i])

def xor(s1,s2):
    return b''.join(bchr(i ^ j) for i, j in zip(s1, s2))

s1 = b'\xc3\xbf\x00\x00\xc3\xbf\x00\xc3\xbf\x00\x00'
s2 = b'aaaaaaaa'
s3 = xor(s1, s2)
s4 = binascii.a2b_qp(s3)
s5 = xor(s2, s4)
print(s5)

s5仍然不是s1,因为s2太短了。替换为

s2 = b'a' * len(s1)

你完成了。现在它与

一起使用
s5 = xor(s2, s3)
print(s5 == s1) # -> True

因此完全不需要binascii内容。