试试这个功能:
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)
这可能会得到改善,但是确实提供了正确的输出。