瞎扯淡 “如果文件内容不一样,MD5 不可能一样的”

lonre · 2014年04月17日 · 最后由 luxin88 回复于 2018年01月24日 · 13547 次阅读

N 个月之前,我在百度开放云平台上提了几个问题,今天他们回复了我一个。

我的问题是这样的:

看了分片文件上传的文档,有点疑问?1. 如果分片的片段中恰巧有片段内容和其他片段相同,那么合并的文件是否会不完整?2. md5 是有碰撞的可能的,假如内容不同 md5 恰巧相同,那么合并文件是否就有问题?当然这都是比较极端的情况,但是不排除这样的可能,这个地方的设计是否不太合理?

他们的回复:

您好,问题 1:这个需要您切割文件的时候注意即可避免,问题 2:,如果文件内容不一样,MD5 不可能一样的,请您知晓。

请大家感受

Update: 怕误伤了人,改了吧

实际上对于海量文件而言,md5 碰撞是经常出现的事情。 大概回复的只是客服

#1 楼 @shiny 看看他们的介绍 http://developer.baidu.com/feedback 专业回答, 快速回复

建议修改为:百度客服

直接用百度好像有点不合适哈

#3 楼 @mobiwolf 他们介绍里说:

提出的问题有专业同学进行准确回答,并保证您问题的隐私性!

😓

#1 楼 @shiny 有点想当然了吧。呵呵。

md5 摘要值一般最后可以写成 32 个 ascii 字符,以小写字母和数字组成。共有 (26+10)^32 种可能排列。大概是 6.33E49,也就是 6 乘以 10 的 49 次方。你要知道整个宇宙的恒星数量也只不过是 3E23。换句话说,如果每颗恒星都爆发成一个完整的小宇宙,大概就是 md5 的 6E49 量级了。

所以,你到底是有多海量的文件,才能在 10 的 49 次方这个量级里面,遇到“碰撞是经常出现的事情”?

一般会同时比对 md5 和 sha1, 两个同时碰撞你可以去买彩票了亲

呵呵,MD5 只是加密串,不是内容压缩。像二维码就是根据内容转换的,能够转回来成文字内容。

如果你把 MD5 当做那啥,内容压缩工具,那就逗了,一部 3D 电影几个 G,转成几十个字符,那太牛了。以后看电影,只需要拷贝那几十个字符,逆转下就成 3D 电影啦。也就是说,MD5 重复是必然滴,它的作用只是用来验证判断内容是否发生过变化。。。

如果只是谈论 md5 的话 不同的文件 md5 可以一样,通过某个黑科技可以实现. http://www.mscs.dal.ca/~selinger/md5collision/

#5 楼 @seamon md5 可以表示成 32 个 16 进制 数字而不是任意 ascii 字符,排列数约 3.40E38, 但是由于 birthday paradox, 网盘里如果总共有 2.2E19 个文件 (目前应该达不到这么多), 就有 50% 的几率出现 md5 相同的文件,另外由于 md5 hash 长度比较短,人为制造相同的哈希需要的计算量,远比穷举哈希空间需要的计算量少得多,别说 "不可能". 虽然网盘还可以进一步对 md5 相同的文件做内容比较再决定是否合并,但涉及安全的地方别用 md5 是常识才对...

你跟客服谈 MD5 碰撞,实在太为难她们了,她们要是理解这东西早去技术部门了吧。

#5 楼 @seamon 呵呵,你没在线上用过吧? 我针对用户头像做个 md5 就已经发现大量碰撞了。 talk is cheap,show me the code.

#11 楼 @shiny 大量碰撞??因为用户头像本来就很多重复的吧……

头像内容一样文件的位深度不一样可以算成是同一个文件么?

#9 楼 @night_song 多谢。这个是我疏忽了。共 128 位,应该是 16^32 才对。MD5 安全性不强这是肯定的,人工精心构造数据的话,是可以有一定概率发生碰撞的。单纯 MD5 是无法保证安全性的,多种手段结合会更靠谱一些。

#11 楼 @shiny 嗯,要不你从发生“大量碰撞”的头像里随便挑几对传上来,我看看是个什么情况。我们还从来没有遇到过 MD5 碰撞的情况,可能是我们数据量太小了吧。一直挺好奇什么样的两个文件会碰撞。

#12 楼 @aptx4869 时间有点久了,记得是不一样的,但也不排除这个可能性。

这个命题有点意思,我去找点数据实验下。第三方的帖子也没少见到,比如说上传的是一个文件,下载下来却是另一个文件(当然也有可能是迅雷之类的 bug)。

至于理论,单纯从字符的位数来进行概率分析是比较初级的,不懂理论,希望下面的内容对看客有所启发。 http://wenku.baidu.com/view/5e3e82d649649b6648d747c4

======= @aptx4869 @seamon 对少量文件匹配了下,我觉得很可能是我「妖言惑众」啦,应该是疏忽了,抱歉,「大量」是不可能的,也就不浪费计算力去验证了。 虽然有自动生成 md5 一样的程序和文件,都是人为的。 不过百度云这样的量级不应该这么不严谨。

哈哈记得有个作业就是关于 MD5 碰撞的 两个 ps 文件一个说请传$20 给我 另一个说请传$1,000,000 给我

匿名 #19 2014年04月18日

我觉得问题一的回答里的问题更严重啊,这种事情切割文件的时候怎么去注意……

#19 楼 @dorentus 结论两个:他们既不专业又不快速。

Dropbox 的设计就没有这些显而易见的问题。

seamon 回复

不说文件,随机生成的 128bit 的字符串,也可能发生碰撞,而且概率还很高,我做了个实验,使用 openssl 生成随机数,然后进行 md5,大约 11w 个的时候,就开始碰撞了,还有 从 1 开始生成数字,大约 2 千万的时候开始有了第一个碰撞(时间久了,记不太清楚具体多少了,反正肯定在 1 亿之内)

需要 登录 后方可回复, 如果你还没有账号请 注册新账号