计算 MD5、SHA-1、SHA-256、SHA-512 等哈希值
哈希是一种将任意长度的数据映射为固定长度摘要的单向函数。相同输入始终产生相同输出,但无法从输出反推输入。哈希广泛用于数据完整性校验、数字签名、密码存储和区块链等领域。即使输入仅变化一个比特,输出也会完全不同(雪崩效应)。
| 算法 | 输出长度 | 安全性 | 用途 |
|---|---|---|---|
| MD5 | 32 hex | ❌ 已破解 | 文件校验(非安全场景) |
| SHA-1 | 40 hex | ⚠️ 不推荐 | 旧版 Git(已淘汰) |
| SHA-256 | 64 hex | ✅ | 数字签名、区块链、TLS |
| SHA-512 | 128 hex | ✅ 更强 | 高安全需求 |
哈希 ≠ 加密:哈希是单向不可逆的;加密有密钥可解密。存储密码应使用 bcrypt 或 Argon2(专为密码设计的慢哈希),而非 MD5/SHA。
MD5 作为安全用途已完全不可信(2004 年即被证明可碰撞攻击)。但在非安全场景下(如文件去重、缓存键生成、数据校验)仍然广泛使用,因为它速度快且输出短。关键原则:不要用 MD5 做任何涉及安全性的事情。
两者安全性在当前都足够。SHA-256 输出更短(32 字节),适合大多数场景;SHA-512 在 64 位处理器上实际运行可能更快,适合需要更高安全余量或处理大量数据的场景。一般优先选 SHA-256。
SHA-256 设计目标是快速计算。攻击者使用 GPU 每秒可计算数十亿次 SHA-256,配合彩虹表可快速破解常见密码。bcrypt/Argon2 通过引入计算成本(时间 + 内存)故意减慢哈希速度,使暴力破解变得不可行。