哈希计算
输入文字或选一个文件,五种摘要一次全出。
这个哈希工具能做什么
哈希函数把任意输入——一句话、一个密码、一个 4 GB 的磁盘镜像——变成固定长度的指纹。输入改动一个比特,指纹就完全不同,这使哈希成为验证文件完整送达、不逐字节比较就判断两份文档是否相同、以及不保存密码本身就能存储密码的标准手段。本页对你输入的文本或选择的任意文件同时计算 MD5、SHA-1、SHA-256、SHA-384 和 SHA-512,以十六进制或 Base64 显示结果。
SHA 系列运行在浏览器的 Web Crypto API 上,与 TLS 使用的是同一套实现,所以对大文件也快而正确。浏览器不提供 MD5,因此内置了一份精简的 RFC 1321 参考实现,已按标准测试向量核对。文件在本地读取,绝不上传。
使用方法
输入或粘贴文本,五个哈希随之更新。点「文件…」可对下载包、安装程序或备份文件计算哈希,文件名和字节数显示在输入框下方。切换「大写」或「Base64」以匹配你的来源格式——Linux 的 sha256sum 输出小写十六进制,许多 API 和 Docker 镜像摘要也用小写十六进制,而 Content-MD5 头和 Subresource Integrity 属性用 Base64。验证下载时,把厂商页面上的校验和粘进「验证」框:匹配的那一行会变绿,状态栏告诉你是否一致,不区分大小写和格式。
勾选「HMAC」并输入密钥即可计算带密钥的哈希(HMAC-SHA256 等),Stripe、GitHub、Slack 的 Webhook 签名、AWS Signature v4 以及许多 API 认证方案都是这样构建的。这里不为 MD5 提供 HMAC,因为任何现代系统都不该再用它。
该用哪种算法
SHA-256 是 2026 年的默认选择:所有语言的标准库都有,输出 64 个十六进制字符,没有已知的实际攻击。SHA-512 在 64 位 CPU 上更快,用于需要更长摘要的场合。SHA-1 和 MD5 的抗碰撞性已被攻破——研究者在 2004 年就构造出 MD5 相同的两个不同文件,2017 年对 SHA-1 做到了同样的事(SHAttered 攻击)——所以它们绝不能用于签名或证书,但用于去重、缓存键、以及对照同一网站发布的校验和检查下载,仍然没问题。存储密码时,以上任何一种单独使用都不合适:请用 bcrypt、scrypt 或 Argon2 这类刻意放慢的算法。
背景:从 MD5 到 SHA-3
MD5 由 MIT 的 Ron Rivest 于 1991 年设计(RFC 1321),作为 MD4 更快的继任者,成为 1990 年代互联网的通用校验和。SHA-1 由 NSA 于 1995 年发布(FIPS 180-1),输出 160 位。随着对两者的攻击成熟,NIST 于 2001 年发布 SHA-2 家族——包括 SHA-256 和 SHA-512——并在公开竞赛后于 2015 年选定 Keccak 作为结构完全不同的备选 SHA-3。浏览器通过 W3C 在 2017 年标准化的 Web Crypto API 暴露了 SHA-1、SHA-256、SHA-384 和 SHA-512,这正是本页这类工具无需服务器就能实现的原因。
应用领域
对照下载页公布的 SHA-256 验证 ISO 镜像、安装包和固件;Git 提交 ID(SHA-1,正在迁移到 SHA-256);Docker 与 OCI 镜像摘要(sha256:…);包管理器的 lock 文件和 HTML 里的 Subresource Integrity;用 HMAC-SHA256 验证 Webhook 签名;CDN 的 ETag 和缓存键;备份工具的文件去重;比特币的工作量证明(双重 SHA-256);以及两份大导出文件的快速等值检查。当签名或摘要藏在 JWT 或 JSON 负载里时,先解开容器,再到这里验证哈希。
常见问题
我的文件会被上传吗?
不会。文件由浏览器读取并用 Web Crypto API 在本地计算。断开网络照样能用。
为什么我的哈希和厂商的校验和对不上?
最常见的原因是下载不完整或文件版本不同,或者拿十六进制和 Base64 比较。「验证」框两种格式都接受且不区分大小写;仍不一致就重新下载。
能从哈希反推出原文吗?
不能,哈希是单向的。但很短或很常见的输入可以被查表命中,这就是密码绝不能以普通哈希形式存储的原因。
MD5 还能用吗?
做校验和、去重可以。任何安全相关用途——签名、证书、密码存储——不行;请用 SHA-256 或更强的算法,密码请用 Argon2 这类慢哈希。
什么是 HMAC?
哈希与一个密钥结合,只有持有密钥的人才能生成或验证。这是 API 为 Webhook 和请求签名的标准方式。