试试这个功能:
def four_byte_xor(buf, key): outl = [] for i in range(0, len(buf), 4): chunk = buf[i:i+4] v = struct.unpack(b"=I", chunk)[0] v ^= key outl.append(struct.pack(b"=I", v)) return b"".join(outl)
我不确定您是否实际将输入减少了4个字节,但是我没有尝试解密它。假设您的输入可被4整除。
编辑,基于新输入的新功能:
def four_byte_xor(buf, key): key = struct.pack(b">I", key) buf = bytearray(buf) for offset in range(0, len(buf), 4): for i, byte in enumerate(key): buf[offset + i] = chr(buf[offset + i] ^ ord(byte)) return str(buf)
这可能会得到改善,但是确实提供了正确的输出。



