MD5 / SHA 哈希在线计算工具

免费的在线哈希计算工具,支持 MD5、SHA-1、SHA-256、SHA-384、SHA-512 五种算法,可对文本或文件(最大 100MB)计算哈希,输出 Hex 或 Base64。SHA 系列基于浏览器原生 Web Crypto API,性能高、安全。

最后更新:

输入

MD5
SHA-1
SHA-256
SHA-384
SHA-512

哈希算法对比

算法输出长度设计年份安全状态推荐场景
MD5128 bit / 32 hex1992已碰撞仅非安全用途(缓存键、ETag)
SHA-1160 bit / 40 hex1995已碰撞兼容老协议;Git(在迁移)
SHA-256256 bit / 64 hex2001安全通用首选(TLS、JWT、Bitcoin)
SHA-384384 bit / 96 hex2001安全TLS 1.3 部分套件
SHA-512512 bit / 128 hex2001安全64 位 CPU 上性能优于 SHA-256

命令行验证

# Linux / macOS
echo -n "hello" | md5sum
echo -n "hello" | sha256sum
sha256sum your-file.zip

# Windows PowerShell
Get-FileHash -Algorithm SHA256 your-file.zip

# Node.js
node -e 'console.log(require("crypto").createHash("sha256").update("hello").digest("hex"))'

# Python
python -c 'import hashlib; print(hashlib.sha256(b"hello").hexdigest())'

注意 echo 默认会在末尾加换行,加 -n 才能与本工具结果一致。

安全使用提示

  • 密码存储:用 Argon2id / bcrypt / scrypt,加随机 salt; 绝不要用 MD5 / SHA-256 直接哈希密码。
  • 数字签名:用 RSA-PSS / Ed25519 + SHA-256 及以上; 不要再用 MD5、SHA-1。
  • 消息认证(MAC):用 HMAC-SHA256 或 KMAC, 不要把密钥简单拼接到消息前再哈希(长度扩展攻击)。
  • HTTPS 文件分发:在 HTTPS 页面公布 SHA-256; HTTP 页面发布的哈希不可信,中间人可同时篡改文件和哈希。
  • 哈希不能"解密":哈希是单向函数,所谓的"MD5 解密网站" 其实只是查彩虹表/字典,对随机密码无效。

常见问题

MD5 还能用吗?为什么有人说它不安全?

MD5 在 2004 年已被证明可以构造碰撞(两个不同输入算出同样的哈希),从那时起不能再用于:数字签名、HTTPS 证书、密码存储、防篡改校验。但它仍然适合:1) 文件完整性快速校验(防止下载传输出错,非防恶意);2) 缓存键、唯一标识;3) 老系统兼容。新场景一律改用 SHA-256 或更强。

MD5 / SHA-256 可以用来存储用户密码吗?

绝对不能直接用。它们速度太快,攻击者能用 GPU 每秒尝试上百亿次。密码必须用专门的「慢哈希」算法:bcrypt、scrypt、Argon2(首选 Argon2id)。这些算法可调节计算成本,强制每次哈希都需要几十毫秒,让暴力破解不可行。同时必须给每个密码独立的 salt。

SHA-1 还能用吗?

已被 Google 在 2017 年实际碰撞(SHAttered 攻击),从此不再适合安全场景。当前用途仅剩:Git commit 哈希(Git 已规划迁移到 SHA-256)、TLS 老协议兼容、HMAC-SHA1 在密钥未泄露时仍可视为 PRF 安全(但建议改 HMAC-SHA256)。新代码请用 SHA-256 或 SHA-3。

SHA-256、SHA-384、SHA-512 怎么选?

SHA-256:日常首选,性能与安全兼顾,是大多数协议(TLS、JWT、Bitcoin)的默认;SHA-384:用于需要更高安全冗余的协议(如 TLS 1.3 部分套件),输出 384 位;SHA-512:在 64 位 CPU 上比 SHA-256 还快(因为它原生用 64 位整数运算),适合长输入。如果不确定,选 SHA-256。

怎么校验下载文件的完整性?

把下载文件上传到本工具,对比官方公布的哈希(通常在下载页面下方或独立 .sha256 文件)。哈希一致说明文件未损坏未篡改。注意:1) 哈希页面本身要在 HTTPS 上获取,否则中间人可以同时改文件和哈希;2) 优先用 SHA-256,MD5/SHA-1 只能防意外损坏不能防恶意。

为什么同样的文本算出来 MD5 和别的工具不一样?

通常是因为:1) 编码不同(UTF-8 vs GBK),中文最常见;2) 行尾不同(CRLF vs LF);3) 输入末尾多了换行/空格;4) BOM 字节(U+FEFF)。本工具统一用 UTF-8 编码、不自动加换行,与 echo -n "text" | md5sum 结果一致。