文件储存用 md5 做标识可行吗,要考虑会出现相同 md5 的文件的情况吗?

2020-12-27 05:24:56 +08:00
 kaiki
为了节省资源打算验证一下 md5 如果有相同的则直接使用之前的,但是 md5 也是可以重复的,有什么好的校验办法吗?
6201 次点击
所在节点    问与答
49 条回复
learningman
2020-12-27 20:32:07 +08:00
@LimeQAQ 百度网盘好像是取前 200k 的 md5 做秒传
LimeQAQ
2020-12-27 21:15:52 +08:00
@lysS 明天去公司了发链接。手机没有。
leon0903
2020-12-27 21:19:45 +08:00
都说 md5 不可靠,但是我觉得没必要考虑这种极小概率的情况。我们公司以前就是用的 md5,我从来没见过有客户投诉说文件不对的情况。
kaiki
2020-12-27 21:20:24 +08:00
@lysS 好像在文件信息里面不断写入数据来改变 md5 也能碰撞吧
zhangxiaogang
2020-12-27 21:29:44 +08:00
不是很关紧的话,文件有修改时间属性,比较一下也可用
okcdz
2020-12-28 00:09:40 +08:00
看你的量大不大了,如果只是做着玩玩,几百几千,甚至几万个文件,MD5 用着不会有啥问题。
但是如果考虑拓展性,几百万,千万文件级别,要用更靠谱的方案了。
kaiki
2020-12-28 00:25:24 +08:00
@okcdz 就算一两个还是得想点合理的办法,万一有人故意针对呢。
打算 md5 加 size 校验,应该够用了
Jooooooooo
2020-12-28 00:29:09 +08:00
百度网盘就用 md5 ( 要是领导问你为什么 md5, 你就这么说
clf
2020-12-28 00:40:52 +08:00
除了网盘、视频网站、图库等大批量存储的应用场景,感觉没必要节省这点资源?

如果需要的话,md5 校验+文件大小判断其实就可以了,另外,相同用户(业务场景)上传的文件才判定为同一文件。这样就基本不可能出啥事情。除非用户刻意找两个 md5 相同且文件大小一样的同后缀文件。
kaiki
2020-12-28 00:44:53 +08:00
@lychs1998 因为想删除的时候一把全删,比如有人传黄图,传很多遍,只要还是同一个文件,那删一次就可以了
clf
2020-12-28 00:52:02 +08:00
@kaiki #30 那 md5 一致性校验只校验一个用户下的文件就行了,基本不会出问题,不会说一个用户恶意攻击导致其他用户文件丢失。
如果出现同个用户下 md5 相同的情况,保留服务器上的原文件,更新一下文件的修改日期即可,这样即便发生了什么,旧的文件和新的文件各在服务器和用户本地都有。(再过分一点的省资源方法就是文件在客户端就做 md5 解析校验,然后对比服务器上有没有,没有的再上传,这样还省带宽)
ijrou
2020-12-28 01:32:09 +08:00
如果文件上千万亿的话,那么 md5 不适合。。。
kaiki
2020-12-28 01:33:30 +08:00
@ijrou 上那个等级我还在问这种问题的话,明天领导应该要通知我领工资了
dusu
2020-12-28 01:51:38 +08:00
我司三千万文件,就是用 md5,几年都没有什么问题,楼主想多了
2kCS5c0b0ITXE5k2
2020-12-28 02:11:01 +08:00
概率很小~ 加上时间基本不可能
aliceclark
2020-12-28 03:29:51 +08:00
具体使用资源大小没有比较过
但是 MD5 不光有几率 collision,而且很慢
安利一波: http://cyan4973.github.io/xxHash/
Arthur2e5
2020-12-28 06:25:53 +08:00
不该,配上长度也不该,因为 md5 不行。现在都公元 202 年了,图速度也可以用 blake3——比 md5 、sha1 、sha256 都快。接下来开始传教 /抹黑同行。

@aliceclark xxHash 那么大一个 non-cryptographic 。这东西是用来做哈希表的,不是用来防人故意撞得。

@dusu 面向什么都敢传的用户还用 md5 就是胆大包天。百度云盘前车之鉴放在那里,以文件损坏出名不是吹的。
wnpllrzodiac
2020-12-28 07:48:53 +08:00
@lysS 尾部嵌入。可以制作以特定字符串停止的滚动 gif.包括文件自身的 md5
nlzy
2020-12-28 10:41:16 +08:00
加上 size 一点用没有。用一台普通的 PC 机在 **几分钟** 内就能生成两个 MD5 一样的文件,而且可以让这两个文件大小一样。

MD5 首次发现冲突都已经十几年了,为什么还要抱着他不放啊。为什么宁愿写各种业务代码,加什么文件大小,加什么时间戳,都不愿意改用一些没有找到冲突的哈希函数啊。

在现代的 64 位 CPU 上,SHA-512 真的很快,SHA-256 速度也没有慢到哪里去,这几个哈希函数性能都是在同一个数量级的,单核都是跑几百 MB/s,比机械硬盘或者 G 口网卡的吞吐量都大了。不要再说 MD5 省资源了。

不要再在新系统中使用 MD5 或者 SHA-1 了,求求你们。
v2tudnew
2020-12-28 11:56:25 +08:00
@LimeQAQ #22 再不发今天又要过去了

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

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

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

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

© 2021 V2EX