我有一个图像文件,并想使用 Python 编辑图像而不明显修改图片,同时仍更改文件的 MD5 哈希。
最好的方法是什么?
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()
output >>> 'a345838e8af07b65344e19989c7c5d85' # 同一媒体文件的新 md5 哈希值
使用@Martijn Pieters 的解决方案:只需在标题或安全的地方更改一点。
或者更简单,如果您可以更改文件大小:在文件中附加一个'\0'
(好吧,任何字符都可以)。它仍然是一个有效的 JPEG 文件,并且没有可见的变化。
echo -n ' ' >> my_image.jpeg
一种粗溶液是
所有像素都会有所不同,几乎没有光学变化。
我最终使用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'