具备拼接同态性的常见非密码学哈希函数除Adler32、CRC外还有哪些?
支持拼接特性的非密码学哈希函数选型
这种支持f(a||b)可通过f(a)、f(b)、len(b)直接计算的特性也叫可组合哈希特性,常用的可选方案如下:
- 多项式滚动哈希(Rabin-Karp哈希):天生具备可组合属性,计算逻辑为
f(a||b) = f(a) * base^len(b) + f(b) mod p,只需要预计算不同长度对应的base幂次,即可快速完成拼接哈希计算,可通过调整模数、base值或采用双模数方案灵活控制碰撞概率。 - CRC系列扩展:除了你提到的CRC64外,还有CRC128可选,CRC类函数的拼接计算逻辑成熟,软硬层面均有大量优化实现,计算速度极快,非常适配流式块拼接场景。
- FarmHash:Google开源的高性能非密码学哈希,部分变体原生支持可组合计算,64位版本性能优于CRC64,碰撞控制表现优异,同时提供128位输出版本适配后续扩容需求。
- XXH3(XXHash3):当前性能第一梯队的非密码学哈希,官方原生提供可组合模式实现,支持64位、128位两种输出长度,针对现代CPU指令集做了深度优化,流式计算延迟极低,是大规模块索引场景的主流选型。
- CityHash:同为Google出品的非密码学哈希,支持可组合计算,提供64位、128位、256位多档输出长度可选,碰撞概率控制稳定,适合超大规模数据集使用。
场景适配建议
针对你提到的2^32量级块的去重场景,给出两个参考选型方向:
- 短期使用可直接沿用CRC64,该规模下碰撞概率约为10^-12量级,完全不会影响业务正确性,且计算开销极低。
- 若考虑后续数据集规模增长,优先选择XXH3-128或FarmHash-128,128位输出下264块量级的碰撞概率才会达到10-12量级,足以支撑长期业务扩容,且性能远高于CRC128。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

