V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
ps1aniuge
V2EX  ›  奇思妙想

庆 61,找抽脑洞,我又发明了文件校验码

  •  
  •   ps1aniuge · 2019-05-28 15:12:49 +08:00 · 4945 次点击
    这是一个创建于 2008 天前的主题,其中的信息可能已经有所发展或是发生改变。
    文件校验码 md5,sha1 大家知道么?我又重新发明了类似校验码。


    校验码名字=买没想好。
    校验码目的=为了发明,文件的唯一哈希值。
    校验码字节数=8


    校验码构成:
    11-22-33-44
    md5 的前两位 11+md5 的后两位 22+sha1 的前两位 33+sha1 的后两位 44



    校验码原理:
    你能碰撞(作弊,欺骗) md5,
    你能碰撞(作弊,欺骗) sha1,
    但你不能同时欺骗 md5+sha1。我这个是取两种简单算法,交叉验证码。



    校验码优点:
    这种交叉,应该比 sha512 算法更可靠。更简单。



    校验码缺点:
    计算需要读 2 遍字符串。



    最终疑问:
    8 个字节=ulong=20 位 10 进制数。
    0 ---》 18446 74407 37095 51615
    能区分这么多种类,够用么?

    111+222+333+444=12 字节总够用了吧?

    算是找抽么?;)
    第 1 条附言  ·  2019-05-29 20:02:08 +08:00
    这个猜想被我命名为 [老童找抽猜想] 。
    这个猜想目的,是想证明:
    12 字节,绝不会被碰撞到。
    8 字节,期待它不会被碰撞到。

    碰撞,懂吗? 也就是说你要算出 2 个文件大小相同,内容不同,但哈希值相同。
    23 条回复    2019-06-01 16:47:41 +08:00
    makdon
        1
    makdon  
       2019-05-28 15:45:45 +08:00   ❤️ 3
    但是你怎么样证明你这个校验码足够唯一?假如有两个文件:
    A 的 md5:1123----6677
    B 的 md5:1134----5577
    A 的 SHA1:aabb----yyzz
    B 的 SHA1:aacc----xxzz

    那得到的结果都是 1177aazz
    这只是个例子,的确 md5 和 sha 都有可能发生两个不同内容出来的值相同,但是你怎么证明你的这个想法中,产生冲突的可能性足够小可以用于实际应用。
    t123yh
        2
    t123yh  
       2019-05-28 15:51:04 +08:00 via Android
    MD5 和 SHA1 在发明的时候,因为用的人比较少,都是没有碰撞方法的。后来用的人多了,才有人研究它们的碰撞方法。

    你的算法,因为没人用,所以没人研究碰撞方法;但并不代表它是安全的。
    boris1993
        3
    boris1993  
       2019-05-28 15:53:29 +08:00 via Android
    emmmm.......这个好像得靠数学证明的吧.......
    xenme
        4
    xenme  
       2019-05-28 15:54:15 +08:00
    现在已经有方法对完整的 md5 和 sha1 进行碰撞攻击,只是代价太高,你这只取前后两位立马把难度降低了不知道多少数量级
    Mohanson
        5
    Mohanson  
       2019-05-28 16:01:23 +08:00 via Android
    现在部分正规下载站,会同时给出 md5 与 sha256. 搞笑的地方在于 256 的 8 次方…嗯嗯嗯,我用笔记本都能给你碰出来。 敲黑板:md5 是 16 个 byte, sha256 是 32 个 byte。md5 用正确算法碰撞在我电脑上不需要一分钟,你的这个算法,暴力遍历就可以了…
    Ultraman
        6
    Ultraman  
       2019-05-28 16:04:58 +08:00 via Android
    为啥不直接把俩拼接起来…
    mcone
        7
    mcone  
       2019-05-28 16:07:10 +08:00
    对,是找抽,虽然我读书不多,对哈希碰撞可以说是门都没双脚进入;但是我建议楼主多读读书,你真的是想的太多了……

    才 8 字节就想“发明”,小学的抽屉原理还记得吗,理论上讲这几乎是送分题……
    azh7138m
        8
    azh7138m  
       2019-05-28 17:26:43 +08:00
    儿童劫
    mooncakejs
        9
    mooncakejs  
       2019-05-28 17:47:39 +08:00
    #1 给出的你都解决不了,md5 的前 2 位 != md5
    xiri
        10
    xiri  
       2019-05-28 18:07:11 +08:00
    正文内容很符合楼主的标题,“庆 61 ”(:手动狗头
    AlisaDestiny
        11
    AlisaDestiny  
       2019-05-28 18:30:28 +08:00
    你这字节数算的不对吧。
    一个 hexadecimal digit 是 4bit.
    11-22-33-44 是 32bit 等于 4 字节。
    而且你这个相当于对数字 1 到( 2^32+1 )求哈希值就有必定会有碰撞,还不如 MD5。
    sobigfish
        12
    sobigfish  
       2019-05-28 18:33:21 +08:00
    你这相当于把两个自行车拼一起,看~我发明了汽车
    liuzhiyong
        13
    liuzhiyong  
       2019-05-28 21:19:29 +08:00
    哥们,你这样搞肯定不行。“ 8 个字节”太离谱。
    eslizn
        14
    eslizn  
       2019-05-28 21:25:10 +08:00
    摘要算法的核心是什么?
    si
        15
    si  
       2019-05-28 21:32:55 +08:00   ❤️ 1
    数据是无限的,hash 是有限的。
    用有限的 hash 映射无限的数据,必定会有重复的。
    hash 越短、碰撞几率越多。
    Windelight
        16
    Windelight  
       2019-05-28 21:50:31 +08:00 via Android
    你这一共 8 个,或者 12 个,也就是 36 的多少次方,最多也就是大约
    4738000000000000000
    个情况,然后这个实际上碰撞可能性更大
    不过 61 快乐,毕竟 20 个小朋友加一个老师出去玩座 20 座车就可以了,司机和老师可以站着呀。
    ps1aniuge
        17
    ps1aniuge  
    OP
       2019-05-29 19:46:00 +08:00
    11 楼你好:“ 1 ”代表 1 个字节,也就是“ ff ”,这样就是 8 个字节了。

    5 楼你好:
    真的这么简单么?
    给你一个文件,
    大小我说了算,就 10mb 吧。

    内容你说了算。
    你随意改变这 10mb 内容,要求同时达到
    md5=1111xxxx2222
    sha1=3333xxxxx4444

    按照我的方法 md5+sha1=1111+2222+3333+4444 总共 8 个字节,
    给你 3 天,你能碰撞出来么?累死你!

    碰撞,你懂吗? 也就是说你要算出 2 个文件内容不同,
    但哈希值都是:1111-2222-3333-4444.这 8 个字节。

    10mb 文件,哈希值是特定的( 16 进制,8 个字节) 1111222233334444,谁能算出来?
    azh7138m
        18
    azh7138m  
       2019-05-29 21:39:59 +08:00
    16 位 16 进制,也就是 [0, 18446744073709551615],换句话说,我只要枚举 [0, 18446744073709551616],就必定会重复。

    说白了,就是一个 64 位数,但是现在普遍认为 SHA-256 不够安全,2 ** 256 是 2 ** 64 的 6277101735386680763835789423207666416102355444464034512896 倍,是 2 ** 96 的 1461501637330902918203684832716283019655932542976 倍。
    Jarek
        19
    Jarek  
       2019-05-30 07:05:33 +08:00 via iPhone
    民科终于把手伸向计算机了
    msaionyc
        20
    msaionyc  
       2019-05-30 09:59:52 +08:00
    民科?
    0312birdzhang
        21
    0312birdzhang  
       2019-05-30 22:29:17 +08:00 via Android
    真.儿童节快乐
    pdfgo
        22
    pdfgo  
       2019-05-30 23:57:40 +08:00 via Android
    愚昧无知为耻
    rmb1222
        23
    rmb1222  
       2019-06-01 16:47:41 +08:00 via iPhone
    生日攻击了解一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   999 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 21:09 · PVG 05:09 · LAX 13:09 · JFK 16:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.