项目简介
xxHash 是由 Yann Collet(Cyan4973)开发的极速非加密哈希算法库。其设计目标是将哈希计算速度推向内存带宽的极限,在非加密哈希领域已成为事实标准。xxHash 提供了 XXH32、XXH64、XXH3(含 XXH128)三个系列算法,在速度上远超同类算法,同时保持了优秀的哈希分布质量(通过 SMHasher 全套测试)。最新版本 v0.8.3 于 2024 年底发布,仍在活跃维护中。
GitHub 数据
- 仓库地址: Cyan4973/xxHash
Stars: 11,064 Forks: 900 - License: BSD 2-Clause
- 主要语言: C / C++
- 版本: v0.8.3(2024-12-30)
- 维护状态: 活跃维护
- 定位: 极速非加密哈希算法,速度接近内存限制
核心功能
- XXH32 / XXH64:32 位和 64 位哈希,兼容早期版本,适合通用场景
- XXH3(XXH128):新一代哈希算法,速度比 XXH64 提升 2-5 倍,提供 64 位和 128 位两种输出
- 流式增量计算:支持分块输入和增量更新,适合大文件和大数据流场景
- SIMD 向量化加速:利用 SSE2、AVX2、AVX-512、NEON 等指令集实现硬件级并行加速
- SMHasher 验证通过:通过严格的哈希质量测试套件,分布均匀性、碰撞率等指标优秀
- 50+ 语言移植:官方 C 核心 + 社区移植覆盖几乎所有主流编程语言
技术栈
- C(核心):高性能底层实现,支持 GCC/Clang/MSVC
- C++:C++ 封装版本,提供 RAII 风格的流式接口
- SIMD 优化:SSE2 / AVX2 / AVX-512 / NEON 向量化指令
- 50+ 移植:Python、Java、Rust、Go、JavaScript、C# 等
- SMHasher:哈希质量验证工具
安装与使用
C 库编译:
git clone https://github.com/Cyan4973/xxHash.git
cd xxHash
make
Python 版本:
pip install xxhash
import xxhash
# XXH64
h = xxhash.xxh64('hello world')
print(h.hexdigest()) # 0xabcdef...
# 流式更新
h = xxhash.xxh64()
h.update(b'hello ')
h.update(b'world')
print(h.hexdigest())
# XXH3 (更快)
h3 = xxhash.xxh3_64(b'hello world')
print(h3.hexdigest())
命令行使用:
# 计算文件哈希
xxhsum filename.bin
# 与 md5sum/sha256sum 类似的输出格式
xxh128sum filename.bin
适用场景
- 哈希表实现:编程语言运行时、数据库索引的哈希计算
- 文件完整性校验:软件包分发、备份系统的快速校验和
- 数据去重:存储系统和备份系统中的块级去重哈希
- 缓存键计算:Web 缓存、分布式缓存的 key 哈希
- Bloom Filter:大数据场景下的快速存在性判断
- 注意:非加密哈希,不可用于密码存储和数字签名等安全场景
竞品对比
| 对比项 | xxHash | CityHash | MurmurHash | SHA-256 |
|---|---|---|---|---|
| 速度(GB/s) | 15-30(XXH3) | 6-10 | 4-8 | 0.3-0.5 |
| 哈希长度 | 32/64/128 | 64/128 | 32/128 | 256 |
| 安全性 | 非加密 | 非加密 | 非加密 | 加密安全 |
| SMHasher 通过 | ✅ | ✅ | ✅ | ✅ |
| SIMD 加速 | SSE2/AVX2/AVX512/NEON | 部分 | 无 | 无 |
| 标准状态 | 事实标准 | Google 内部 | 社区流行 | NIST 标准 |
| 速度 vs SHA-256 | 40-50 倍快 | — | — | 基准 |
参考资料
- GitHub 仓库: https://github.com/Cyan4973/xxHash
- xxHash 官网: https://xxhash.com/
- SMHasher: https://github.com/rurban/smhasher
- Wikipedia: https://en.wikipedia.org/wiki/XXHash
文档信息
- 本文作者:zhupite
- 本文链接:https://zhupite.com/sec/xxhash.html
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)