次のコードは、バイナリ形式を正しく読み書きしていないようです。バイナリ ファイルを読み取り、データをビット単位で XOR し、ファイルに書き戻します。構文エラーはありませんが、データは検証されません。別のツールを使用してソース データをテストし、xor キーを確認しました。
更新: コメントのフィードバックによると、これは私がテストしていたシステムのエンディアンが原因である可能性が最も高いです。
def four_byte_xor(buf, key):
out = ''
for i in range(0,len(buf)/4):
c = struct.unpack("=I", buf[(i*4):(i*4)+4])[0]
c ^= key
out += struct.pack("=I", c)
return out
xortools.py を呼び出します。
from xortools import four_byte_xor
in_buf = open('infile.bin','rb').read()
out_buf = open('outfile.bin','wb')
out_buf.write(four_byte_xor(in_buf, 0x01010101))
out_buf.close()
回答ごとにバイトを読み取る必要があるようです。上記の関数は複数のバイトを操作するため、上記の関数はどのように以下に組み込まれますか? またはそれは問題ではありませんか?structを使用する必要がありますか?
with open("myfile", "rb") as f:
byte = f.read(1)
while byte:
# Do stuff with byte.
byte = f.read(1)
たとえば、次のファイルには 01020304 という 4 つの繰り返しバイトがあります。
データは、元のバイトをゼロにする 01020304 のキーで XOR されます。
これは元の関数での試行です。この場合、05010501 は正しくない結果です。