除了 md5 有没有比较短的哈希算法

2022-08-15 18:04:58 +08:00
 brader

平时都是使用 md5 做哈希,但是有时候感觉 32 位太长了,有点浪费,想问下大家除了 md5 ,还有没有其他优秀的哈希算法?比较短的

4881 次点击
所在节点    程序员
34 条回复
mengzhuo
2022-08-15 18:06:44 +08:00
fnv
InDom
2022-08-15 18:06:58 +08:00
substr(md5(""), 8, 16);
mengzhuo
2022-08-15 18:09:01 +08:00
ps md5 是 128 位的
lululau
2022-08-15 18:10:08 +08:00
%2
seki
2022-08-15 18:10:55 +08:00
crc32 ?

越短越容易碰撞
brader
2022-08-15 18:11:28 +08:00
@mengzhuo 额,是的,可能我用的单位表述不是很专业,我想说的就是看到它的是长度为 32 的字符串形式,明白就好
brader
2022-08-15 18:11:59 +08:00
@InDom 想问下截取中间的是什么依据,靠谱吗
brader
2022-08-15 18:12:47 +08:00
@seki 嗯嗯,明白,短的话碰撞概率就高,但是有某些简单的场景,不需要那么高的抗碰撞率
murmur
2022-08-15 18:16:21 +08:00
crc32 ,我们是做 url 二级索引的,url 多了一级索引查的很郁闷,所以先 hash 一次然后二次查询
ysc3839
2022-08-15 18:19:28 +08:00
CRC32 FNV1a-32 CityHash32 等,一般一些简单用途我会选 FNV1a-32 ,因为它非常简单。
ysc3839
2022-08-15 18:25:19 +08:00
再补充一个 MurmurHash
Bromine0x23
2022-08-15 18:38:36 +08:00
看起来不需要防碰撞,那就 CRC
或者 https://en.wikipedia.org/wiki/List_of_hash_functions 里面挑一个
AX5N
2022-08-15 18:53:07 +08:00
CRC3 CRC4 CRC8 CRC16 CRC32 CRC64
lmshl
2022-08-15 18:56:24 +08:00
substr 解君忧
zengxs
2022-08-15 19:06:40 +08:00
md5 默认是 hex 格式输出,你可以输出成 base64 ,这样去掉占位的 = 号,就只有 22 位字符了
hgc81538
2022-08-15 19:16:54 +08:00
續 15 樓
md5 編碼成 base94 ?
hsfzxjy
2022-08-15 21:13:09 +08:00
xxhash 家族
raaaaaar
2022-08-15 21:17:27 +08:00
直接所有 ascill 相加成 16 进制😁
mitu9527
2022-08-15 21:19:09 +08:00
防碰撞哈希算法就没短的,感觉你要的是快速哈希算法,比如 Murmur 或者 CRC ,快且短,但是容易发生冲突。
tool2d
2022-08-15 21:44:01 +08:00
把 MD5 断尾没问题,你可以自己做碰撞概率测试,每个 bit 概率是一样的。

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

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

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

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

© 2021 V2EX