除了 md5 有没有比较短的哈希算法
平时都是使用 md5 做哈希,但是有时候感觉 32 位太长了,有点浪费,想问下大家除了 md5 ,还有没有其他优秀的哈希算法?比较短的
fnv
substr(md5(""), 8, 16);
ps md5 是 128 位的
%2
crc32 ?
越短越容易碰撞
额,是的,可能我用的单位表述不是很专业,我想说的就是看到它的是长度为 32 的字符串形式,明白就好
想问下截取中间的是什么依据,靠谱吗
嗯嗯,明白,短的话碰撞概率就高,但是有某些简单的场景,不需要那么高的抗碰撞率
crc32 ,我们是做 url 二级索引的,url 多了一级索引查的很郁闷,所以先 hash 一次然后二次查询
CRC32 FNV1a-32 CityHash32 等,一般一些简单用途我会选 FNV1a-32 ,因为它非常简单。
再补充一个 MurmurHash
看起来不需要防碰撞,那就 CRC
或者 en.wikipedia.org/wiki/List_of_hash_functions 里面挑一个
CRC3 CRC4 CRC8 CRC16 CRC32 CRC64
substr 解君忧
md5 默认是 hex 格式输出,你可以输出成 base64 ,这样去掉占位的 = 号,就只有 22 位字符了
續 15 樓
md5 編碼成 base94 ?
xxhash 家族
直接所有 ascill 相加成 16 进制😁
防碰撞哈希算法就没短的,感觉你要的是快速哈希算法,比如 Murmur 或者 CRC ,快且短,但是容易发生冲突。
把 MD5 断尾没问题,你可以自己做碰撞概率测试,每个 bit 概率是一样的。
非标准 base64 算法。把数字,小写字母,大写字母和一些特殊字符都用上,变成 N 进制,重新再编码这样就短了。一个 uuid 都可以编码到 22 个字符以下,只是字符看你能不能接受
哈希截断挺常见的,很多标准库都会有这种操作
md2 ,md4
可以试试 blake2/3 ?
www.blake2.net/
SipHash 不是专门设计来解决你这个问题的嘛?
CRC32 ,短到你用一个 int 就能存
security.stackexchange.com/a/72685
直接截前面一段就行,要多长截多长
但是 md5 本来就是比较差的算法,再截一下就更差了,如果需要防碰撞就换个 sha256 之类的吧
jhash 算法。 计算字符串的哈希,得到 4 字节哈希值。 github.com/ysmood/jhash
wyhash ,输出字符串长度 16 位,而且是目前最快且安全的算法
而且 wyhash is the default hashing algorithm of the great great Zig, V, Nim and Go (since 1.17) language
xxhash
cityhash murmurhash
xxhash 挺好的,非密码安全的哈希,速度也快。
网上搜了一圈,有第三方 | 第四方支付,但无法确定是否靠谱,问下 v 友有没有做过的,靠谱的支付。目前想到的一个办法是,用户量不大的情况下,手动去支付。这个办法效率不高,但也能…
主要是想要用广告屏蔽和网易云音乐解锁之类的功能 代理跑在上面也可以 不知道有没有试过的 感觉可以用 docker 配置网卡,自己弄桥接。但是安卓上面没有试过,也搞不清楚那…
生手提问, 因为要兼容旧的 opwerwrt 设备的 ov ,要编译一个比较老版本的 openvp* openvp*-2.3.2.tar ,去做 Server 端 2.3.…