2

画像ファイルがあり、Pythonを使用して、ファイルのMD5ハッシュを変更しながら、画像を視覚的に変更せずに画像を編集したいと考えています。

これを行うための最良の方法は何ですか?

4

3 に答える 3

3
import hashlib
hashlib.md5(open('image.png','rb').read()).hexdigest() # rb = readbyte ,so it will work for text as well as media (image,video) files

出力>>>'724c6d87452c3a137ef1499c2d4b6576'#md5ハッシュ値

file = open('image.png', 'rb').read()
with open('new_image.png', 'wb') as new_file:
  new_file.write(file+'\0')  #here we are adding a null to change the file content

hashlib.md5(open('new_image.png','rb').read()).hexdigest()

出力>>>'a345838e8af07b65344e19989c7c5d85'#同じメディアファイルの新しいmd5ハッシュ値

于 2014-10-11T18:10:43.867 に答える
2

@Martijn Pietersのソリューションを使用してください。ヘッダーの1ビットを変更するか、安全な場所に変更してください。

または、ファイルサイズを変更できる場合は、さらに簡単です。ファイル'\0'に(まあ、どの文字でもかまいません)を追加します。それはまだ有効なJPEGファイルであり、目に見える変化はありません。

echo -n ' ' >> my_image.jpeg

1つの大まかな解決策は

  • 画像(の1つの色平面)をフーリエ空間に変換するには(dft / fftを使用)、
  • 低周波数(主に2次元配列の右下に格納されている)の一部のピクセル値を変更し、
  • 画像を画像空間に変換し直します(ifftを使用)。

すべてのピクセルは、光学的な変化がほとんどないかまったくない状態で異なります。

于 2013-03-06T18:06:01.930 に答える
1

pyexiv2を使用して、次のように画像のメタデータを変更することになりました。

>>> md5sum('photo.jpg')
'89dd603a0ce14750799a5144a56fbc12'
>>> image = pyexiv2.ImageMetadata('photo.jpg')
>>> image.read()
>>> image['Exif.Image.ImageDescription'] = '%030x' % random.randrange(256**15)
>>> image.write()
>>> md5sum('photo.jpg')
'426cc91835e7f4f5e92c5a48850adc05'
于 2013-03-06T18:47:10.923 に答える