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 = 1c0111001f010100061a024b53535009181cbb = 686974207468652062756c6c277320657965 以及打印时的输出: resultado2 = b"孩子不玩" and resultado3 = bytearray(b'\x00 ..... \x00') (全部用零填充)

原因很简单:bytearray(n) returns 一个长度为 n 的零初始化字节数组。因此,当您执行 resultado3 += bytearray(byte1 ^ byte2) 时,您实际上是将一定长度的全空字节数组连接到您的 resultado3.

为达到您的预期目的,请改用 resultado3 += bytearray([byte1 ^ byte2])(注意一个元素的列表)。