首页 > 解决方案 > 生成 jpg 文件的许多不同哈希值,而对图片的更改最少

问题描述

我的目标是编写一个程序(例如在 Python 或 C++ 中),它将 JPG 文件(例如tux.jpg )作为输入并对其进行微小的更改,以便输出许多不同的图像(可能是一千张图像甚至更多) ,但在某种程度上,所有这些图像虽然具有不同的哈希值,但在视觉上看起来几乎相同,即更改对原始图像的影响应尽可能小。

我首先尝试使用 jpg 标题,但这可能不足以制作我想要的数千张不同的图片。作为一种天真的方式,我想在文件中翻转一个随机位,但该位可能会导致不太理想的结果,尤其是在小图片中可以看到(例如,燕尾服图片中白色空间中的暗像素)。理想情况下,我想用“相邻”颜色改变一个随机像素,这样两张生成的图片几乎没有视觉差异。

为此,我阅读了 JPG 编解码器示例,但我发现它非常混乱且难以理解。有人可以帮我我的程序在解析二进制格式的文件时应该寻找什么以及如何用“相邻”颜色更改随机像素吗?

标签: binaryjpeghex-editors

解决方案


您可以通过播放文件头来更改文件的注释部分。一个简单的方法是使用一个现成的开源程序,它允许您放置您选择的注释,例如 HLLO 重复 8 次。那应该给你 256 位可以玩。然后,您可以使用十六进制编辑器确定 HLLO 模式在文件中的位置。然后,您将数据加载到内存中并开始更改这 32 个字节并每次计算散列以获得冲突(匹配的散列)

当你发现碰撞时,宇宙已经结束了。

虽然理论上可行,但实际上不可能在合理的时间内破解 SHA256,标准加密协议将结束,黑客将享受他们的时间。


推荐阅读