如何在Python中更改图像的MD5哈希?

时间:2013-03-06 17:54:35

标签: python image md5 md5-file

我有一个图像文件,并希望使用Python编辑图像而不会明显修改图片,同时仍然更改文件的MD5哈希值。

最好的方法是什么?

3 个答案:

答案 0 :(得分:2)

使用@Martijn Pieters的解决方案:只需更改标题中的一位或安全的地方。

或者更简单,如果您可以更改文件大小:在文件中附加'\0'(好,任何字符都可以)。它仍然是一个有效的JPEG文件,并且没有明显的变化。

echo -n ' ' >> my_image.jpeg

一种原油解决方案

  • 将图像(一个颜色平面)转换为傅立叶空间(使用dft / fft),
  • 更改低频中的一些像素值(主要存储在二维数组的右下角),
  • 并将图像转换回图像空间(使用ifft)。

所有像素都会有所不同,几乎没有光学变化。

答案 1 :(得分:2)

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哈希值

答案 2 :(得分: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'