kaiki
V2EX  ›  问与答

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

  •  2
     
  •   kaiki · Dec 27, 2020 · 8045 views
    This topic created in 2137 days ago, the information mentioned may be changed or developed.
    为了节省资源打算验证一下 md5 如果有相同的则直接使用之前的,但是 md5 也是可以重复的,有什么好的校验办法吗?
    49 replies  •  2020-12-29 10:15:37 +08:00
    3dwelcome
    3dwelcome
    Dec 27, 2020 via Android
    1
    我是再加上文件大小,和 md5 组合在一起。
    光 md5 判断,你心里用着也不踏实。
    toaruScar
    toaruScar
    Dec 27, 2020
    2
    MD5 不行的,Length Extension Attack 了解一下。
    geelaw
    geelaw
    Dec 27, 2020 via iPhone❤️1
    3
    @toaruScar #2 length extension 和 collision resistance 不矛盾。

    不过 MD5 已经不是 collision-resistant hash function 了,恶意碰撞可行,所以不宜使用。
    kaiki
    kaiki
    OP
    Dec 27, 2020
    4
    @3dwelcome 所以我记录什么和查询什么才能最效率的识别已存在内容呢?以及标识用什么方法生成
    gunpowderfans
    gunpowderfans
    Dec 27, 2020 via Android
    5
    同时校验多种 hash 也许可以
    kaiki
    kaiki
    OP
    Dec 27, 2020
    6
    @gunpowderfans 校验的话倒是可以多种,校验哪些数据呢?
    url 中就得有一个唯一标识了,这个怎么算呢?
    LimeQAQ
    LimeQAQ
    Dec 27, 2020 via iPhone❤️11
    8
    昨天刚试了两张图片 md5 相同的情况,第二张上传到百度网盘,打开变成了第一张图片。惊不惊喜,意不意外。
    imgbed
    imgbed
    Dec 27, 2020 via Android
    9
    看你有多少文件,如果不大,不需要考虑极小概率
    QingXuJiaZhi
    QingXuJiaZhi
    Dec 27, 2020 via Android
    10
    用 sha256
    JinTianYi456
    JinTianYi456
    Dec 27, 2020
    11
    @3dwelcome #1 加上大小也可能一样 /t/169241

    @kaiki 月经问题 /t/733384
    crab
    crab
    Dec 27, 2020
    12
    可以用 sha1+文件大小
    Daming
    Daming
    Dec 27, 2020 via Android
    13
    布隆过滤器还要多个 hash 呢,还不保证一定存在。
    只用 md5 岂不是更不保险。
    riggzh
    riggzh
    Dec 27, 2020 via iPhone
    14
    任天堂使用的是 sha256 然后截取前 16 位
    YouLMAO
    YouLMAO
    Dec 27, 2020 via Android❤️1
    15
    md5 破解第一人应该是哈工大,活该被制裁
    dethan
    dethan
    Dec 27, 2020 via Android❤️46
    16
    @YouLMAO 你这是什么脑残言论?我上网这么久,真的是第一次喷人,太傻逼了
    QingXuJiaZhi
    QingXuJiaZhi
    Dec 27, 2020
    17
    看这里 https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest

    md5 早已被证明碰撞风险太大,而 sha-1 则是 is now considered vulnerable (脆弱的、易受攻击的)。

    一般来说 sha256 够用了,则在不行还可以考虑用 sha-384 甚至 sha-512
    unixeno
    unixeno
    Dec 27, 2020 via Android
    18
    建议用 sha256
    lysS
    lysS
    Dec 27, 2020
    19
    @LimeQAQ 所以怎么得到两张一样 md5 的照片喃?
    ThirdFlame
    ThirdFlame
    Dec 27, 2020
    20
    sha256 + 文件大小 目前可靠的。
    就个人 /企业使用 md5 + 文件大小 实际上也是没啥问题的。
    learningman
    learningman
    Dec 27, 2020
    21
    @LimeQAQ 百度网盘好像是取前 200k 的 md5 做秒传
    LimeQAQ
    LimeQAQ
    Dec 27, 2020 via iPhone
    22
    @lysS 明天去公司了发链接。手机没有。
    leon0903
    leon0903
    Dec 27, 2020
    23
    都说 md5 不可靠,但是我觉得没必要考虑这种极小概率的情况。我们公司以前就是用的 md5,我从来没见过有客户投诉说文件不对的情况。
    kaiki
    kaiki
    OP
    Dec 27, 2020
    24
    @lysS 好像在文件信息里面不断写入数据来改变 md5 也能碰撞吧
    zhangxiaogang
    zhangxiaogang
    Dec 27, 2020 via iPhone
    25
    不是很关紧的话,文件有修改时间属性,比较一下也可用
    okcdz
    okcdz
    Dec 28, 2020
    26
    看你的量大不大了,如果只是做着玩玩,几百几千,甚至几万个文件,MD5 用着不会有啥问题。
    但是如果考虑拓展性,几百万,千万文件级别,要用更靠谱的方案了。
    kaiki
    kaiki
    OP
    Dec 28, 2020
    27
    @okcdz 就算一两个还是得想点合理的办法,万一有人故意针对呢。
    打算 md5 加 size 校验,应该够用了
    Jooooooooo
    Jooooooooo
    Dec 28, 2020
    28
    百度网盘就用 md5 ( 要是领导问你为什么 md5, 你就这么说
    clf
    clf
    Dec 28, 2020
    29
    除了网盘、视频网站、图库等大批量存储的应用场景,感觉没必要节省这点资源?

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

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

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

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

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

    不要再在新系统中使用 MD5 或者 SHA-1 了,求求你们。
    Overfill3641
    Overfill3641
    Dec 28, 2020
    40
    @LimeQAQ #22 再不发今天又要过去了
    wakzz
    wakzz
    Dec 28, 2020
    41
    目前 md5 会出现哈希冲突的问题,通过使用 sha256 替代 md5 可以解决。
    shansing
    shansing
    Dec 28, 2020
    42
    SHA-256 吧,实在觉得长就截取。
    tabris17
    tabris17
    Dec 28, 2020
    43
    无论是哪种摘要算法,碰撞是肯定的,然而你只要防范恶意碰撞就行了,加盐 md5 足够了
    fffang
    fffang
    Dec 28, 2020
    44
    @nlzy
    @wakzz
    因为 Terminal 自带 MD5 所以大家都用 MD5 吧。。
    LimeQAQ
    LimeQAQ
    Dec 28, 2020
    45
    @v2tudnew 哈哈哈,今天有点忙,我压缩上传某盘了,你下载看一下。给某盘或某乎上传 2.jpg ,打开后会发现现实 1.jpg 的内容。
    哇,注册不够 30 天,不能发链接。你自己拼一下
    pan.baidu.com/s/1svvr6tFoHwrcag9-n-DdhQ 提取码: qg42
    Overfill3641
    Overfill3641
    Dec 28, 2020
    46
    @LimeQAQ #45 ..... 亏我觉得百度校验要半天以为是多种哈希值计算的
    geligaoli
    geligaoli
    Dec 28, 2020
    47
    用 sha256 吧,md5 和 sha1 都已经有冲突文件了。
    LimeQAQ
    LimeQAQ
    Dec 28, 2020 via iPhone
    48
    @v2tudnew 要我写我也是 md5 计算后上传了😳😳😳
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2043 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 125ms · UTC 16:26 · PVG 00:26 · LAX 08:26 · JFK 11:26
    ♥ Do have faith in what you're doing.