xxHash 极速哈希算法
xxHash 是一款运行速度接近内存带宽极限的非加密哈希算法,跨平台结果一致,提供 XXH32、XXH64 与向量化的 XXH3/XXH128,广泛用于校验、哈希表与布隆过滤器等场景。
爱鲜报评分
0 人评分
11k
星数
否
中文
C
主语言
是
活跃
125
贡献者
人工分析
EDITORIAL推荐理由
性能极其突出,XXH3 在 AVX2 下可达 59 GB/s,甚至超过 memcpy 参考速度,是同类非加密哈希中的第一梯队。API 简洁、单头文件即可集成,且算法输出跨版本稳定,适合长期依赖。生态成熟,已被大量数据库、压缩工具与语言绑定采用,工程可靠性有保障。
适用场景
- 文件与数据块完整性校验(如 xxhsum 替代 md5sum)
- 哈希表、布隆过滤器等数据结构的散列函数
- 数据库、存储引擎与缓存系统的分片/索引键
- 大数据管道与网络传输中的快速去重与校验
- 压缩工具、归档格式中的内容指纹
优点
- 速度极快,XXH3 在支持 AVX2 的 CPU 上可超过内存拷贝速度
- 跨平台输出一致,大小端系统结果相同,且跨版本稳定
- 提供 32/64/128 位多种变体,支持一次性与流式增量哈希
- 集成简单,支持单头文件 XXH_INLINE_ALL 与 CMake/vcpkg 等包管理
- 通过 SMHasher 测试,并自带大规模碰撞测试工具,质量有保证
缺点
- 非加密哈希,绝不能用于签名、口令存储等安全场景
- 固定位宽哈希仍受生日悖论影响,存在碰撞可能
- 部分高级宏(如 XXH_STATIC_LINKING_ONLY)与动态链接不兼容,需注意 ABI
- 仓库以英文文档为主,中文资料相对较少
xxHash 是什么
xxHash 是一款极快的非加密哈希算法,运行速度接近内存带宽上限。它高度可移植,在大小端平台上都能产生完全相同的哈希值,并且算法一旦定稿,输出结果在后续版本中保持稳定。
⚠️ 注意:xxHash 不是加密哈希函数,不要用于数字签名、口令存储或任何需要抗攻击能力的场景。
算法家族
| 算法 | 输出位宽 | 说明 |
|---|---|---|
| XXH32 | 32 位 | 使用 32 位算术 |
| XXH64 | 64 位 | 使用 64 位算术 |
| XXH3 / XXH128 | 64 / 128 位 | 自 v0.8.0 起提供,使用向量化算术 |
新项目推荐默认使用 XXH3_64bits();需要 128 位哈希时使用 XXH3_128bits()。
性能表现
在 Intel i7-9700K 上的参考数据(Clang -O3):
- XXH3 (AVX2):约 59.4 GB/s
- XXH128 (AVX2):约 57.9 GB/s
- XXH64:约 19.4 GB/s
- XXH32:约 9.7 GB/s
- 作为参照,内存 memcpy 约 28.0 GB/s
XXH3 不仅在大数据上快,在小数据(哈希表、布隆过滤器常见场景)上同样经过专门优化,初始化与收尾开销控制得很好。
快速上手
默认 make 会同时构建库和 xxhsum 命令行工具:
make
./xxhsum -H3 README.md
最简单的 API 一次调用即可完成整块内存的哈希:
#include <stddef.h>
#include "xxhash.h"
XXH64_hash_t hash_buffer(const void* buffer, size_t size)
{
return XXH3_64bits(buffer, size);
}
如需头文件内联集成,可在包含前定义宏:
#define XXH_INLINE_ALL
#include "xxhash.h"
API 同时支持对未知长度的数据流做增量哈希,完整示例见 xxhash.h 头文件注释。
质量与测试
- 所有变体均通过 Austin Appleby 的 SMHasher 测试套件。
- 仓库自带大规模碰撞测试器,可生成并比较数十亿个哈希值,验证 64 位算法的极限表现。
- 对非对抗性输入,xxHash 追求均匀分布,便于在哈希表或索引中均匀散列。
安装与集成
xxHash 已进入众多包管理器。以 vcpkg 为例:
vcpkg install xxhash
# 同时安装命令行工具
vcpkg install "xxhash[xxhsum]"
CMake 集成方式可参考仓库中的 CMake 指南。
适用建议
如果你需要的是速度优先、非安全用途的哈希,例如文件校验、数据去重、哈希表散列,xxHash 是非常成熟且可靠的选择;若涉及安全场景,请改用 SHA-2、BLAKE3 等加密哈希。
评论
- 暂无评论,来写第一条吧。