XOR字节串
XOR strings of bytes
我想对两个字节串进行异或运算,我试图找出这两段代码之间的区别,最后一段有效,但我不明白为什么一个有效而另一个无效.我也尝试过使用字节 object 但也不起作用。
resultado3 = bytearray(len(ab))
for byte1, byte2 in zip(ab, bb):
resultado3 += bytearray(byte1 ^ byte2)
resultado2 = bytes([ x^y for (x,y) in zip(ab, bb)])
作为我的两个输入:
ab = 1c0111001f010100061a024b53535009181c 和 bb = 686974207468652062756c6c277320657965 以及打印时的输出:
resultado2 = b"孩子不玩" and resultado3 = bytearray(b'\x00 ..... \x00') (全部用零填充)
原因很简单:bytearray(n)
returns 一个长度为 n
的零初始化字节数组。因此,当您执行 resultado3 += bytearray(byte1 ^ byte2)
时,您实际上是将一定长度的全空字节数组连接到您的 resultado3
.
为达到您的预期目的,请改用 resultado3 += bytearray([byte1 ^ byte2])
(注意一个元素的列表)。
我想对两个字节串进行异或运算,我试图找出这两段代码之间的区别,最后一段有效,但我不明白为什么一个有效而另一个无效.我也尝试过使用字节 object 但也不起作用。
resultado3 = bytearray(len(ab))
for byte1, byte2 in zip(ab, bb):
resultado3 += bytearray(byte1 ^ byte2)
resultado2 = bytes([ x^y for (x,y) in zip(ab, bb)])
作为我的两个输入: ab = 1c0111001f010100061a024b53535009181c 和 bb = 686974207468652062756c6c277320657965 以及打印时的输出: resultado2 = b"孩子不玩" and resultado3 = bytearray(b'\x00 ..... \x00') (全部用零填充)
原因很简单:bytearray(n)
returns 一个长度为 n
的零初始化字节数组。因此,当您执行 resultado3 += bytearray(byte1 ^ byte2)
时,您实际上是将一定长度的全空字节数组连接到您的 resultado3
.
为达到您的预期目的,请改用 resultado3 += bytearray([byte1 ^ byte2])
(注意一个元素的列表)。