BLAKE2 是什么
BLAKE2 是由 RFC 7693 定义的哈希家族:BLAKE2b 面向 64 位平台,最长输出 64 字节;BLAKE2s 面向 32 位平台,最长输出 32 字节。它内置密钥化模式与可调输出长度,在很多平台上速度优于同类的通用哈希,因此在文件校验、内部完整性与部分密码库的默认哈希中被广泛使用。它未被 NIST 标准化,合规场景需要按适用标准另行评估。
基本信息
| 标准 | RFC 7693 |
|---|---|
| 变体 | BLAKE2b 最长 64 字节,BLAKE2s 最长 32 字节 |
| 内置能力 | 密钥化模式与可调输出长度 |
| 常见位置 | 文件校验、内部完整性、部分库的默认哈希 |
典型使用场景
- 文件与镜像校验:需要更快的替选摘要算法时
- 内部完整性校验:对性能敏感且不需要跨标准互认
- 库默认哈希:许多语言运行时把它作为快速哈希选项
- 密钥化校验:在协议允许时替代部分消息认证用途
- 对参数一致性要求高的场景:需要显式约定输出长度
计算 BLAKE2
计算 BLAKE2
b2sum file.bin # 命令行校验值
python3 -c "import hashlib; print(hashlib.blake2b(b'data', digest_size=32).hexdigest())"
python3 -c "import hashlib; print(hashlib.blake2b(b'data', key=b'secret').hexdigest())"
openssl dgst -blake2b512 file.bin # 部分构建提供两个变体
| 变体 | 面向平台 | 最长输出 | 常用输出 |
|---|---|---|---|
| BLAKE2b | 64 位平台 | 64 字节 | 32 或 64 字节 |
| BLAKE2s | 32 位平台 | 32 字节 | 16 或 32 字节 |
输出长度是可调参数,跨平台互校时必须显式约定相同的输出长度与变体,否则同一条数据会得到不同的校验值。
使用注意
- 跨系统对接时同时约定变体与输出长度
- 密钥化模式不能直接替代协议中规定的消息认证构造
- 合规场景先确认该算法是否在允许清单内
- 用于口令存储不合适,应使用专用算法
密钥化模式是一种带密钥的哈希,与标准消息认证构造的接口语义和安全假设并不相同;协议若已规定认证方式,应按协议实现而不是替换。