def xor_bytes (b, a):
for i,z in zip(b,a):
if i>z:
return byte1
if i<z:
return byte2
if i==z:
return 0
- 查看标准库文档
zip
或在终端尝试一下
- 案件很重要。我修复了你的大写
z
s
- 没有必要使用 range 来遍历列表。只需遍历列表。
- 此代码实际上不会按预期工作,或者根本不会工作,因为您有未定义的变量
请注意,您的代码实际上只会返回一个字节。您可能想将其用作生成器:
def xor_bytes (b, a):
for i,z in zip(b,a):
if i>z:
yield i
if i<z:
yield z
if i==z:
yield chr(0)
In [6]: list(xor_bytes('hambone', 'cheesey'))
Out[6]: ['h', 'h', 'm', 'e', 's', 'n', 'y']
您可能想要这个:
In [13]: [chr(ord(a)^ord(b)) for a,b in zip('hambone', 'cheesey')]
Out[13]: ['\x0b', '\t', '\x08', '\x07', '\x1c', '\x0b', '\x1c']
如果不是很明显,这需要两个字节字符串并返回一个字节列表(或技术上,长度为 1 字节的字符串),其中包含对每对字节进行异或运算的结果。
或者:
In [14]: ''.join(chr(ord(a)^ord(b)) for a,b in zip('hambone', 'cheesey'))
Out[14]: '\x0b\t\x08\x07\x1c\x0b\x1c'