擅长:python、mysql、java
<p>这里有一个相对简单的解决方案(经过测试):</p>
<pre><code>import sys
from xortools import four_byte_xor
in_buf = open('infile.bin','rb').read()
orig_len = len(in_buf)
new_len = ((orig_len+3)//4)*4
if new_len > orig_len:
in_buf += ''.join(['x\00']*(new_len-orig_len))
key = 0x01020304
if sys.byteorder == "little": # adjust for endianess of processor
key = struct.unpack(">I", struct.pack("<I", key))[0]
out_buf = four_byte_xor(in_buf, key)
f = open('outfile.bin','wb')
f.write(out_buf[:orig_len]) # only write bytes that were part of orig
f.close()
</code></pre>
<p>它所做的是将数据的长度填充到4字节的整数倍,即使用4字节键的xor,但随后只写出原始长度的数据。</p>
<p>这个问题有点棘手,因为4字节键的数据字节顺序取决于处理器,但总是先用高字节写入,而字符串或字节数组的字节顺序总是先用低字节写入,如十六进制转储所示。要允许将密钥指定为十六进制整数,必须添加代码以有条件地补偿不同的表示形式,即允许密钥的字节可以按照十六进制转储中出现的字节的相同顺序指定。</p>