SHA-256 哈希计算:HEX 与 Base64 输出怎么用
输入文本,选算法,点「计算」,一次拿到 HEX 和 Base64 两种表示。摘要由浏览器 WebCrypto 在本地计算,内容不会上传;浏览器原生不提供 MD5,需要 MD5 只能用本地命令行。
什么时候真的需要
核对发布页或邮件给出的 SHA-256 校验值:把内容粘进来算一遍,和对方给的字符串逐字符比对,确认两边一字不差。
同一份内容要同时以两种形式交付:一个系统存 HEX,另一个接口收 Base64。一次计算就能拿到两列,不用自己转换。
给短文本做指纹,用于缓存键、去重标记,或调试时比对两份配置是否相同。
- 核对 SHA-256 校验值
- 同时要 HEX 和 Base64
- 生成缓存键、去重指纹
- 确认两份文本是否完全一致
怎么做才不出错
先确认输入完全一致。摘要对字节敏感:末尾多一个换行、少一个空格、全角冒号换成半角,得到的摘要就完全不同。校验文件内容时尤其要注意编辑器是否自动补了结尾换行。
HEX 和 Base64 是同一串字节的两种写法,不是两个不同的哈希。SHA-256 输出 256 位,即 32 字节:HEX 是 64 个字符(本站输出小写),Base64 是 44 个字符(含一个填充 =)。比对时任选一种,但两边要用同一种表示,并注意大小写和填充。
算法选择:SHA-1 的碰撞已经可以实际构造(SHAttered 及后续工作),签名、证书、防篡改都不该再用,保留它只是为了核对历史校验值。新设计直接用 SHA-256;需要更长摘要时用 SHA-384 或 SHA-512。
本工具没有 MD5,因为浏览器原生 WebCrypto 不提供。WebCrypto 的 digest 只支持 SHA-1/256/384/512,MD5 从未进入标准,个别浏览器早期的非标准支持后来也被移除。需要 MD5 就用命令行:md5sum、md5 或 openssl dgst -md5。
哈希不是密码哈希。裸 SHA-256 没有盐、速度又快,密码、手机号这类可枚举输入用彩虹表和 GPU 暴力很快就能反查;密码存储要用 bcrypt、scrypt 或 Argon2 这类带盐且故意变慢的算法。
还有一点容易忽略:裸哈希挡不住长度扩展攻击,需要密钥参与时应该用 HMAC,而不是 hash(key + message)。本工具只做裸摘要,不提供 HMAC 和加盐。
- 输入差一个字节,摘要就完全不同
- HEX 与 Base64 是同一结果的两种写法
- SHA-1 只用于核对历史值
- 无 MD5、无 HMAC、无加盐
替代方案与局限
文件校验用系统工具:macOS/Linux 的 shasum -a 256、sha256sum,Windows 的 certutil -hashfile。它们读的是文件字节,不受编码和换行影响,这才是校验安装包的正确方式。
需要 HMAC 用 WebCrypto 的 importKey 加 sign(算法 HMAC),或命令行 openssl dgst -sha256 -hmac;需要密码哈希用 bcrypt、scrypt、Argon2 的库。
本工具只对文本框里的 UTF-8 文本做摘要,读不到二进制文件,也没有流式处理;算法只有 SHA-1/256/384/512,没有 MD5,也不做 HMAC 或加盐。
- 文件校验 → shasum / certutil
- HMAC → WebCrypto 或 openssl
- 密码 → bcrypt、scrypt、Argon2
- 只做文本摘要
常见问题
哈希能反解吗?
不能。摘要是单向的,输出长度固定,原文信息已经丢失,唯一的办法是穷举候选再比对。但「不能还原」不等于「安全」:密码、低熵口令、手机号这类可枚举的输入,用彩虹表、字典和 GPU 暴力很快就能反查出来。所以密码存储要用 bcrypt、scrypt 或 Argon2 这类带盐且故意变慢的算法,直接存 SHA-256 算不上密码哈希。
为什么不提供 MD5?
因为浏览器不提供。WebCrypto 的 digest 只支持 SHA-1/256/384/512,MD5 从未进入标准,个别浏览器早期的非标准支持后来也被移除。用 JavaScript 手写实现不仅慢,还要自己保证没有实现错误;更重要的是 MD5 的碰撞早已可以工程化构造,不该再用于签名或完整性校验。确实需要时请用本地命令行:md5sum、md5 或 openssl dgst -md5。
SHA-1 还能用吗?
看用途。SHA-1 的碰撞已经可以实际构造(SHAttered 及后续工作),签名、证书、防篡改场景一律不该再用。Git 的对象 ID 这类遗留用途还在跑,但新设计应该直接选 SHA-256。本工具保留 SHA-1 只是为了核对历史校验值,不代表推荐。另外它和所有裸哈希一样挡不住长度扩展攻击,需要密钥参与时用 HMAC。
相关工具:哈希计算