AX 爱鲜报

xxHash 极速哈希算法

xxHash 是一款运行速度接近内存带宽极限的非加密哈希算法,跨平台结果一致,提供 XXH32、XXH64 与向量化的 XXH3/XXH128,广泛用于校验、哈希表与布隆过滤器等场景。

爱鲜报评分

0.0

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 等加密哈希。

评论

登录后才可评论与评分

0 条评论

  • 暂无评论,来写第一条吧。