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

2019-05-28 15:12:49 +08:00
 ps1aniuge
文件校验码 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 字节总够用了吧?

算是找抽么?;)
4976 次点击
所在节点    奇思妙想
23 条回复
makdon
2019-05-28 15:45:45 +08:00
但是你怎么样证明你这个校验码足够唯一?假如有两个文件:
A 的 md5:1123----6677
B 的 md5:1134----5577
A 的 SHA1:aabb----yyzz
B 的 SHA1:aacc----xxzz

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

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

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

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

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

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

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

© 2021 V2EX