Python异或错误
Python XOR error
所以这是一小段代码,曾经单独使用,但是当我试图将它实现到我的代码中时,它给了我一个错误,我想这是因为我改变了 s2 里面的位在没有 binascii 的情况下对 s3 进行 XOR 的任何其他方法。a2b_qp
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
如前所述,chr()
returns 一个字符串。
在 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
东西。
所以这是一小段代码,曾经单独使用,但是当我试图将它实现到我的代码中时,它给了我一个错误,我想这是因为我改变了 s2 里面的位在没有 binascii 的情况下对 s3 进行 XOR 的任何其他方法。a2b_qp
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
如前所述,chr()
returns 一个字符串。
在 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
东西。