两张内容不一样但是 md5 一样的图片 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
virusdefender
V2EX    分享发现

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

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

    文在 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  
    PRO
       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     Solana     5521 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 06:34 PVG 14:34 LAX 23:34 JFK 02:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86