不可能完成的任务:在图片上打上它的 md5 哈希值

2020-01-01 18:10:47 +08:00
 manami

就在刚才,我看到微信有个好友的头像比较好看,就点开来看。发现他给图片加了 2 行信息:

For xxx use only
md5: xxx

可以猜测他应该是为了防止别人盗图而加的额外信息。看到这里会发现,这其中有一个他不可能完成的任务:在图片上打上它的 md5 哈希值。于是我就问了我这个朋友,他说他知道的啊,只是打算加个类似水印的东西。给图片打上正确的 md5 哈希值是不可能完成的:因为你一加 md5 哈希值这个图片文件本身就被修改了,md5 哈希值也随之发生了改变。这是多么有意思的事情啊!

我相信我这个朋友他应该是故意的,因为他是非常聪明的人,很有意思的不可能完成的"水印"把我给惊艳到了。

于是我打开 ps 软件,把我的微信头像图片也加了这两行信息……

11990 次点击
所在节点    分享发现
69 条回复
also24
2020-01-01 18:16:54 +08:00
楼主你下载一下这张图片,然后 md5 一下试试看?

https://shells.aachen.ccc.de/~spq/md5.gif
also24
2020-01-01 18:19:54 +08:00
zacharyjia
2020-01-01 18:25:28 +08:00
哈哈哈,直接被楼上打脸
我记得 md5 已经有碰撞生成器了
manami
2020-01-01 18:25:34 +08:00
@also24 我回去试试😂
manami
2020-01-01 18:26:25 +08:00
sha256 等其他加密类似的呢
manami
2020-01-01 18:32:22 +08:00
@zacharyjia 老哥你怕是理解错了,我知道 md5 已经有碰撞器,但这跟用它来校验文件完整性无关
Osk
2020-01-01 18:35:37 +08:00
图片格式中应该有不少区域和看到的图像无关,说不定以后随着技术的发展真的能做到 /doge/
secondwtq
2020-01-01 18:39:24 +08:00
碰撞这个理论上倒是可行,问题是发到网络上(尤其是国内网络)基本都会有一道压图,格式也可能会转。我觉得不行
delectate
2020-01-01 18:41:23 +08:00
Here is the explanation:

1. Generate a gif for each possible digit in the first column
2. Append collision blocks to each gif to make a 16 way collision
3. Repeat for each digit
4. Hash the final product
5. Replace each digit with the correct digit
https://news.ycombinator.com/item?id=13823704

也就是说,只有特定的格式文件才能这么操作,而且要精心匹配,否则不太可能搞定的。
delectate
2020-01-01 18:43:33 +08:00
还有个办法是用隐写术保证版权,压缩了也很难被破除;
就像阿里前几年抢月饼被开除的事情,有人把内部论坛的截图发出来,通过隐写术破译出来泄密者是谁了。
那么怎么解决隐写术呢?不追求画质的前提下,手机拍一下,问题全解决了。如果追求画质,那么很复杂,知道原理的可以逆向操作,不知道就只能类似于重绘一个很相似的图。
also24
2020-01-01 18:46:27 +08:00
@zacharyjia #3
也不算打脸,只是觉得这个图片很应景就发了一下~

毕竟还是做不到对任意图片的任意修改,就像 @delectate #9 提到的,有很多条件限制。

@manami #5
你看你,一整篇都写的 “哈希”,怎么回帖里翻车写个 “加密” 出来。
codingadog
2020-01-01 18:46:30 +08:00
@delectate 拍出来也是能还原的吧。。。毕竟是在频域上做的标记
lostpg
2020-01-01 18:47:09 +08:00
这种操作叫次原像攻击(已知 x,求 x'使二者的哈希值相同)。sha2,包括你说的 sha256 都是能抵御次原像攻击哒。
3dwelcome
2020-01-01 18:54:29 +08:00
可以学习比特币原理,用循环随机方法来无限逼近特定 hash 值,是可行的。
比如只匹配 md5 前八位,就可以。
KunMinX
2020-01-01 19:00:33 +08:00
加水印了 md5 就发生改动了,刻舟求剑,是这个理不 😂
manami
2020-01-01 19:31:34 +08:00
@KunMinX 感觉差不多😂
chinvo
2020-01-01 19:35:22 +08:00
重点在于,只要你重新保存一个压缩格式的图像,那么他的 hash 就会发生天翻地覆的变化

把原图的 hash 放放到图的元数据里面倒是有点用,但是大部分网站和应用会对图做压缩或者丢弃元数据
crclz
2020-01-01 19:39:06 +08:00
理论上(数学)是可以的。设字母表Σ大小为 S,哈希字符串长度为 L,改变图片的其他部分,组成 S^L + 1 种组合,总会遇到相同的。
lostpg
2020-01-01 19:47:40 +08:00
@crclz 哈希的值域都是相当大的,良好设计的哈希算法几乎不可能遇到两个相同哈希的原文。。
winterbells
2020-01-01 20:36:02 +08:00
一直有个想法,
一个压缩包的密码是自己的 HASH 值
里面放着一个文件名是自己 HASH 值得文件
文件的内容也是自己的 HASH 值

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/634203

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX