V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
virusdefender
V2EX  ›  分享发现

两张内容不一样但是 md5 一样的图片

  •  
  •   virusdefender · 2015-02-08 13:14:13 +08:00 · 35316 次点击
    这是一个创建于 3366 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原文在 http://weibo.com/1619185424/C3fQkvyfH?type=comment

    下载地址 http://pan.baidu.com/s/1kTpAUNl#path=%252Fmd5.%25E7%25A2%25B0%25E6%2592%259E

    我这比较的md5也确实是一样的

    MacBook-Pro:md5 virusdefender$ md5 plane.jpg
    MD5 (plane.jpg) = 253dd04e87492e4fc3471de5e776bc3d
    MacBook-Pro:md5 virusdefender$ md5 ship.jpg
    MD5 (ship.jpg) = 253dd04e87492e4fc3471de5e776bc3d

    但是sha1不一样

    MacBook-Pro:md5 virusdefender$ openssl sha1 ship.jpg
    SHA1(ship.jpg)= 9639db1fbadfcfbd4025a9b95d10b7799f65fcfb
    MacBook-Pro:md5 virusdefender$ openssl sha1 plane.jpg
    SHA1(plane.jpg)= 780973c1c165e76de3f10e1771db31cf9362d1f5

    72 条回复    2020-01-02 09:11:49 +08:00
    Luzifer
        1
    Luzifer  
       2015-02-08 13:26:13 +08:00   ❤️ 1


    有意思,怎么做到的?
    DennyDai
        2
    DennyDai  
       2015-02-08 13:28:10 +08:00   ❤️ 1
    md5的算法本来就是有可能重复的。。。虽然几率很小吧。。。
    所以才一般都用MD5+sha1.。。让几率更小
    virusdefender
        3
    virusdefender  
    OP
       2015-02-08 13:29:41 +08:00   ❤️ 2
    paw
        4
    paw  
       2015-02-08 13:31:28 +08:00   ❤️ 2
    http://www.win.tue.nl/hashclash/
    chosen-prefix collisions方法构造碰撞的
    greatdk
        5
    greatdk  
       2015-02-08 13:32:42 +08:00   ❤️ 1
    6=3+3
    6=2+4
    Luzifer
        6
    Luzifer  
       2015-02-08 13:32:54 +08:00
    Draplater
        7
    Draplater  
       2015-02-08 13:43:34 +08:00 via Android
    应该是主动碰撞的
    Delbert
        8
    Delbert  
       2015-02-08 13:50:41 +08:00
    尽管推荐用sha1()来进行数据散列算法,但另一种算法MD5也很流行。MD是消息摘要“Message Digest”的缩写。md5()产生数据散列的方式同sha1()相同,只是md5()返回的结果只有32个字节。因为sha1()的位数更长,所以相对来说不容易发生“碰撞”——一种两个不同的字符串得到同样的哈希值的情况。

    http://php.code.kekou.de/Functions/Playing_with_strings/alternative_data_hashing.html
    lsmgeb89
        9
    lsmgeb89  
       2015-02-08 13:54:44 +08:00
    这个不是好几年前就有了吗?是中国的一位女密码学家的成果。
    buerwei
        10
    buerwei  
       2015-02-08 15:12:48 +08:00
    头像~~~嘘~
    est
        11
    est  
       2015-02-08 16:02:39 +08:00
    LZ你搞一个去掉EXIF和任何附加metadata或者尾部无用字节的 jpeg ,内容不同,md5一样,就算你厉害。
    h4rdy
        12
    h4rdy  
       2015-02-08 16:11:39 +08:00
    fastcoll.exe就能做到
    kimmykuang
        13
    kimmykuang  
       2015-02-08 16:46:48 +08:00
    MD5碰撞吧,好像是一个中国的女学者首先证实的
    shyangs
        14
    shyangs  
       2015-02-08 17:23:59 +08:00
    百度网盘的秒传是用MD5,分别传这两张上去实验看看 ฅ'ω'ฅ
    zhfy1991
        15
    zhfy1991  
       2015-02-08 18:16:07 +08:00
    @shyangs 这两个文件都太小了,用不用秒传都是秒传~
    DingSoung
        16
    DingSoung  
       2015-02-08 18:20:48 +08:00
    生成两个内容不同,但是MD5,听说过,牛
    poporange630
        17
    poporange630  
       2015-02-08 18:40:26 +08:00 via Android
    这么说吧 MD5就那长 但数据却是无穷无尽的 所以总会出现多种数据对应一个MD5的情况 这是很自然的
    love
        18
    love  
       2015-02-08 18:52:03 +08:00
    @poporange630 你知道md5是16字节吗?即使宇宙每个原子都对应一个md5都不会重复。
    sincway
        19
    sincway  
       2015-02-08 19:04:52 +08:00
    @love 无限集合映射到有限集合,总会有碰撞的
    yfdyh000
        20
    yfdyh000  
       2015-02-08 19:12:00 +08:00
    @love 16字节是截断过的吧,只有前半。“一般128位的MD5散列被表示为32位十六进制数字。”。
    yfdyh000
        21
    yfdyh000  
       2015-02-08 19:19:31 +08:00
    @love IPv6地址和MD5输出都是128bit,IPv6地址只是地球每粒沙子的级别,MD5不可能做到宇宙所有原子的级别吧。而且SHA1的输出是160bit、SHA256/512更长,如果MD5已经那么大了,没必要再加长了吧。
    msg7086
        22
    msg7086  
       2015-02-08 19:28:31 +08:00 via iPhone
    @love 如果不会重复,那以后文件都不用存整个了,直接从散列里还原出唯一内容就好了。
    love
        23
    love  
       2015-02-08 19:38:34 +08:00
    @msg7086 我是说理论上会重复,实际上可以认为不会,至少不用但心随机碰撞。按wikipedia的说法32个字节就可以对应宇宙中所有原子。
    yfdyh000
        24
    yfdyh000  
       2015-02-08 19:45:19 +08:00
    @love 哪篇说的?
    Slienc7
        25
    Slienc7  
       2015-02-08 20:15:32 +08:00
    @love 哈哈,漲姿勢了!。。。
    Slienc7
        26
    Slienc7  
       2015-02-08 20:16:13 +08:00
    @love 求wikipedia鏈接
    Tink
        27
    Tink  
       2015-02-08 20:16:16 +08:00
    撞了
    love
        28
    love  
       2015-02-08 20:20:48 +08:00
    yfdyh000
        29
    yfdyh000  
       2015-02-08 20:25:17 +08:00
    @love 哪句,没看到。建议看看 http://zh.wikipedia.org/wiki/数量级_(数据) ,两者差得很远。
    dofine
        30
    dofine  
       2015-02-08 20:26:09 +08:00 via iPhone
    @lsmgeb89 没记错的话是王小云(芸),原先我们学校的数学系教授,后来就去了清华。
    Slienc7
        31
    Slienc7  
       2015-02-08 20:40:40 +08:00
    @love 32位md5可存儲信息量: 16^32=2^128 近似 10^38

    全球儲水量:1386×10^7亿立方米 近似 10^10億立方米 即億噸 即 10^18 噸
    即10^(18+6)g 即10^24g 不管氧原子,衹算氫原子:10^24 g *1/9 約爲 10^23g 約爲 10^23 mol
    10^23 * NA 約爲 6*10^46個 約爲 10^46 個
    Slienc7
        32
    Slienc7  
       2015-02-08 20:42:04 +08:00
    一算才發現確實很大,不過還差的遠~
    love
        33
    love  
       2015-02-08 20:50:55 +08:00
    @xgowex 那上写估算原子总数在10^80量级,len(str(256**32)) == 10^78,也差不多了
    loading
        34
    loading  
       2015-02-08 20:52:14 +08:00
    样子不同,年龄相同的两个人。(年龄就是摘要)
    Slienc7
        35
    Slienc7  
       2015-02-08 20:59:27 +08:00
    @love 沒搞懂怎麽算10^78的~
    yfdyh000
        36
    yfdyh000  
       2015-02-08 21:05:38 +08:00
    @love 你这算的是32位字节最多能存储的数据量。上面说过了,MD5的输出是128bit,32个字节是转换后的十六进制数列。128bit/8=16字节。PS: 原来真的是16字节,20楼我说错了。
    @xgowex http://zh.wikipedia.org/wiki/数量级_(数据) 写的“128 bits (16 bytes)”是2^7。
    ETiV
        37
    ETiV  
       2015-02-08 21:16:46 +08:00
    仨球放俩抽屉里, 在不切割球的前提下, 必然有一个抽屉有俩球.
    jiangrongyong
        38
    jiangrongyong  
       2015-02-08 21:29:36 +08:00   ❤️ 1


    百度云识别成同一张了 2333
    BGLL
        39
    BGLL  
       2015-02-08 22:33:11 +08:00
    @love

    128位MD5 = 2^128 = 3.4 ×10^38 个地址

    1摩尔 = 6.02×10^23

    (3.4 ×10^38)/(6.02×10^23) = 5.6x10^14 摩尔

    按25度下的水来算 =5.6x10^14 /18 = 3.1 x 10^13 克 = 3.1x10^7 吨 = 3千万吨水
    一条128位MD5 = 3千万吨水原子

    忽略温度,2010年全国总用水量6022.0亿吨
    BGLL
        40
    BGLL  
       2015-02-08 22:45:16 +08:00
    @xgowex
    32字节 = 2^256 =1.1x10^77 个地址

    宇宙可可观测原子数量 N x10^80 个 还是不够...
    typcn
        41
    typcn  
       2015-02-08 22:52:54 +08:00
    有程序可以一键碰撞 MD5
    GPU
        42
    GPU  
       2015-02-08 22:59:16 +08:00
    @Luzifer 属性插件发一下。
    yeluozhiqiu1981
        43
    yeluozhiqiu1981  
       2015-02-08 23:08:21 +08:00
    @jiangrongyong plane那张根本传不上去好吧,怎么传都显示的是ship 的图片
    Luzifer
        44
    Luzifer  
       2015-02-08 23:22:51 +08:00
    sennes
        45
    sennes  
       2015-02-08 23:24:37 +08:00   ❤️ 1
    刚刚把两张图解压出来之后想放到印象笔记里面
    发现两张图变一模一样了=,=
    取决于你先丟哪张进去。有意思。
    abelyao
        46
    abelyao  
       2015-02-08 23:42:03 +08:00
    @sennes @jiangrongyong @yeluozhiqiu1981
    明明都知道 MD5 可以主动碰撞,而且都好多年了啊,这些服务商为什么到现在都还在用 MD5 做重复校验呢…?
    mortal
        47
    mortal  
       2015-02-08 23:47:48 +08:00
    @sennes 好玩!
    h0wardc
        48
    h0wardc  
       2015-02-09 01:09:28 +08:00
    @abelyao 因為沒人會主動去撞吧...
    msg7086
        49
    msg7086  
       2015-02-09 01:15:59 +08:00
    @abelyao 所有的哈希算法都会撞。平时用的hashtable啥的,hash key天天撞年年撞,也没见大家都把hashtable删了自己实现啊?
    Agromania
        50
    Agromania  
       2015-02-09 01:32:28 +08:00
    @love 差的太远了吧,无限到有限,理论上来说是一定会碰撞的,学过数学的极限的话应该知道

    有限 / 无限 = 0
    如果你把宇宙中所有原子md5,其状况是几乎一直在碰撞:因为早就塞满了。

    简单算一下,32位的MD5有16^32个值,也就是3.4028236692094 * 10^38

    太阳的质量是1.989×10^30 千克,其中71.3%是氢

    一个氢原子的质量约为1.66×10^-27 千克
    所以仅仅是太阳就有1.1981927710843 * 10^57 个氢原子,如果把这样氢原子散列在MD5的空间里,
    那么平均每个md5值上需要塞


    3.5211720840144 * 10^18 个氢原子。也就是说,没有碰撞的概率可以忽略不计。

    小伙子,请对宇宙有敬畏之心。
    Agromania
        51
    Agromania  
       2015-02-09 01:33:37 +08:00
    抱歉,我忘记乘以71.3%了,不过,你懂的……
    canautumn
        52
    canautumn  
       2015-02-09 02:20:19 +08:00
    以前有一次用qq邮箱发超大附件,别人接收到的是另一个不知道是谁的压缩包,里边都是限制级的图。试了好多次都这样。
    xieyudi1990
        53
    xieyudi1990  
       2015-02-09 04:43:51 +08:00
    @jiangrongyong 收集新出A片的MD5, 然后弄一堆同MD5的葫芦娃抢先上传, 2333
    garipan
        54
    garipan  
       2015-02-09 05:32:15 +08:00
    碰撞
    a2z
        55
    a2z  
       2015-02-09 07:24:18 +08:00   ❤️ 1
    @xieyudi1990

    方校长有一篇干扰BT下载的论文里就是这么干的,233
    rrfeng
        56
    rrfeng  
       2015-02-09 09:06:44 +08:00
    @dofine 校友你好。这是你学长 @kfc315
    b821025551b
        57
    b821025551b  
       2015-02-09 09:55:02 +08:00
    王小云那个碰撞啊,但是碰撞了之后出来的应该是个打不开的文件,而这个文件居然很完整?!
    jesonyang
        58
    jesonyang  
       2015-02-09 10:45:54 +08:00
    一堆科学家开始在这里计算了!
    xunyu
        59
    xunyu  
       2015-02-09 11:24:55 +08:00
    有意思,这样的话可以用这个方式替换掉别人云上的文件了
    kkhaike
        60
    kkhaike  
       2015-02-09 12:04:33 +08:00
    @Luzifer 这是什么插件
    tomheng
        61
    tomheng  
       2015-02-09 14:57:05 +08:00
    大小也一样,我很好奇这是构造的还是巧合?
    ryd994
        62
    ryd994  
       2015-02-09 16:18:14 +08:00
    @b821025551b jpg是允许结尾拼接无关数据的。所谓”图种“就是这么来的
    dorentus
        63
    dorentus  
       2015-02-09 18:03:10 +08:00
    @msg7086 所有的 hashtable 实现都会考虑并且处理碰撞的啊
    b821025551b
        64
    b821025551b  
       2015-02-09 18:08:12 +08:00
    @ryd994 但是md5是散列的啊!!像图种那样拼接在结尾是不能实现md5一样呀
    itfanr
        65
    itfanr  
       2015-02-09 19:10:59 +08:00
    有意思
    qq446015875
        66
    qq446015875  
       2015-02-09 22:00:26 +08:00
    @kkhaike HashTab
    Cu635
        68
    Cu635  
       2015-02-09 22:15:18 +08:00
    @msg7086 也不是,hash函数原理是单向过程很简单,但是反推就极其复杂。可能是一一映射,但是想通过hash值找原函数几乎不可能。

    md5就是被发现了可行的算法来找相同md5的串,所以不安全了。
    ryd994
        69
    ryd994  
       2015-02-10 01:25:13 +08:00
    @b821025551b 未必,王小云不是已经证明某些情况下主动碰撞难度可以大大降低了么。
    两张图片原来的大小不一样都没关系,补到同大小
    我只要给两张图片分别补上构造的数据,使他们md5一样即可。
    ryd994
        70
    ryd994  
       2015-02-10 04:35:10 +08:00
    @b821025551b 举个例子,微软所有的iso,crc都是FFFFFFFF,就是通过补32位的数据做到的。
    当然CRC不抗人为攻击,做起来要简单点,MD5是散列,做起来麻烦点而已。
    FENICE
        71
    FENICE  
       2015-02-10 07:53:13 +08:00 via Android
    涨姿势了!
    l00t
        72
    l00t  
       2020-01-02 09:11:49 +08:00
    有人能当场做个图么?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2513 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 15:44 · PVG 23:44 · LAX 08:44 · JFK 11:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.