SHA-512 是什么
SHA-512 是 FIPS 180-4 定义的哈希函数:输出 512 位(64 字节)、块长 1024 位、80 轮、按 64 位字运算,因此在使用 64 位寄存器的平台上往往比 SHA-256 更快。家族里还有 SHA-512/224 与 SHA-512/256 两个截断变体,它们使用不同初值,与 SHA-224/SHA-256 并不是同一算法。
基本信息
| 标准 | FIPS 180-4 §6.4 及后续小节 |
|---|---|
| 输出长度 | 512 位(64 字节) |
| 块长度 | 1024 位(128 字节) |
| 字长 / 轮数 | 64 位 / 80 轮 |
| 截断变体 | SHA-512/224、SHA-512/256(使用不同初值) |
| 常见用途 | 大文件校验、HMAC、Ed25519 内部哈希、部分签名场景 |
典型使用场景
- 大文件校验:64 位平台上吞吐优于 SHA-256,适合镜像与备份校验
- HMAC-SHA512:在部分协议与接口签名中出现
- 签名摘要:与 P-521 等高强度公钥搭配时使用
- Ed25519 内部哈希:签名方案内部以此为哈希
- 需要短输出又要 64 位结构:可使用 SHA-512/256 并与对端明确约定
使用与校验
使用与校验
# 文件校验:-c 回验清单,输出 OK 或 FAILED
sha512sum file.iso > file.iso.sha512
sha512sum -c file.iso.sha512
# 与 openssl 交叉验证,结果应完全一致
openssl dgst -sha512 file.iso
# 三个成员的输出长度不同,可据此快速判断
printf '%s' abc | openssl dgst -sha512
printf '%s' abc | openssl dgst -sha384
# 截断变体需要明确的算法名,不能靠简单截断实现
openssl list -digest-algorithms | grep -i 'sha512-256'成员与用途
| 成员 | 输出 | 结构 | 典型用途 |
|---|---|---|---|
| SHA-512 | 512 位 | 64 位字,80 轮 | 大文件校验、HMAC、Ed25519 内部哈希 |
| SHA-384 | 384 位 | 64 位字,80 轮 | P-384 场景与部分 TLS 套件 |
| SHA-512/256 | 256 位 | 64 位字,不同初值 | 需要短输出但偏好 64 位结构 |
| SHA-512/224 | 224 位 | 64 位字,不同初值 | 较少使用,兼容个别标准 |
截断变体不是「截断」:SHA-512/256 使用与 SHA-512 不同的初始向量,因此结果既不是 SHA-512 的前 32 字节,也不等于 SHA-256。跨系统对接时若一方按截断实现,会得到完全不同的摘要,且报错通常只写校验失败。
性能结论要按平台实测:64 位 CPU 上 SHA-512 通常更快,但部分硬件加速指令只覆盖 SHA-256,此时 SHA-256 反而占优。选型前用 openssl speed -evp sha256 与 sha512 实测更稳妥。
与 SHA-256 的取舍也受协议约束:TLS 套件、证书签名算法与部分设备接口都规定了可用哈希,若对端只支持 SHA-256,即便 SHA-512 在本地更快也不能替换。选型顺序是先满足协议与对端要求,再在可选范围内做性能比较。