极简工具箱

免费在线工具 · 本地计算 · 无需上传

SHA-256 怎么用:文件校验、签名与命令行校验

下载一个安装包,官网给出了一串 64 位字符;Git 用 SHA-1 给每个提交编号。哈希校验是软件分发链里最便宜、也最容易被跳过的一道防线。

广告位(百度联盟)

一、SHA-256 的基本参数

SHA256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

二、和 MD5、SHA-1 的对比

算法输出长度现状
MD5128 位碰撞已实用化,不可用于安全场景
SHA-1160 位2017 年 SHAttered 实际碰撞,Git 正在迁移
SHA-256256 位目前安全,通用首选
SHA-512512 位更慢,64 位平台性能反而不错

SHA-1 的碰撞案例很直观:两个内容不同、SHA-1 相同的 PDF 被公开构造出来。这也是 Git 推出 SHA-256 仓库格式的原因。

三、校验下载文件的完整流程

  1. 从官网下载安装包,同时拿到官方公布的 SHA-256 值(通常在 SHA256SUMS 文件或发布页)。
  2. 本地计算实际摘要。
  3. 比对,完全一致才安装。
# Linux
sha256sum package.tar.gz

# macOS(系统自带 shasum)
shasum -a 256 package.tar.gz

# Windows PowerShell
Get-FileHash .\package.zip -Algorithm SHA256

如果有 SHA256SUMS 文件,可以自动校验整批:

sha256sum -c SHA256SUMS
# package.tar.gz: OK

注意:校验值必须来自与文件不同的渠道,且最好走 HTTPS。如果哈希值和安装包放在同一台被攻破的服务器上,攻击者可以同时替换两者,校验就失去意义。

四、哈希相同就等于安全吗

不等于。它只能证明「内容和官方公布摘要时一致」,前提是那串摘要是可信的。攻击链上还有几个缺口:

所以哈希校验是「必要条件」而非「充分条件」,配合代码签名(Windows Authenticode、macOS 公证)才完整。

五、不要用它存密码

SHA-256 是快速哈希,反查表能覆盖绝大多数弱密码。存密码必须用慢哈希 + 盐:bcrypt、scrypt、Argon2id。加盐只能防「彩虹表批量匹配」,防不住「针对单个用户的暴力破解」,关键还是慢。

需要「带密钥的摘要」时用 HMAC-SHA256,而不是 sha256(key + msg)——后者存在长度扩展攻击风险,详见 HMAC 是什么。

六、几个使用细节

日常算文本摘要用 SHA 计算,校验下载文件用 文件哈希校验(本地读取,文件不上传)。

小结

SHA-256 = 256 位、当前安全、通用校验首选;校验必须用独立渠道拿到的摘要;它不能替代密码哈希;带密钥的场景用 HMAC 而不是简单拼接。

本文相关工具(本地计算,无需上传)

更多使用教程