
什么是哈希?
哈希是一种数学过程,它将任何输入——一个单词、一个文件、一条数据库记录——转换为固定长度的输出,称为摘要或哈希值。这种转换是确定性的(相同输入总是产生相同输出),但实际上是不可逆的(无法从哈希值重建输入)。
这种单向特性将哈希与加密区分开来。加密在有正确密钥的情况下是可逆的,而哈希则不是。这使得哈希非常适合验证数据完整性和存储凭据,而无需暴露原始数据。

哈希函数如何工作
一个好的密码学哈希函数满足三个特性:
- 确定性——相同输入总是产生相同哈希值。
- 雪崩效应——输入的微小变化(甚至一个比特)会完全改变哈希值。
- 抗碰撞性——在计算上应无法找到两个不同输入具有相同哈希值。
以 SHA-256 为例的雪崩效应:
输入: "hello"
SHA-256: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
输入: "hellp"
SHA-256: ac3478d69a3c81fa62e60f5c3696165a4e5e6ac4b51d12bed36a0f21b3c3e1a8
尽管只有一个字符不同,但哈希值完全不同。
流行哈希算法对比
| 算法 | 输出大小 | 速度 | 安全状态 |
|---|---|---|---|
| MD5 | 128 位(32 个十六进制字符) | 非常快 | 已破解——请勿用于安全目的 |
| SHA-1 | 160 位(40 个十六进制字符) | 快 | 已弃用——存在碰撞攻击 |
| SHA-256 | 256 位(64 个十六进制字符) | 快 | ✅ 广泛使用,推荐 |
| SHA-512 | 512 位(128 个十六进制字符) | 中等 | ✅ 强,适用于文件完整性 |
| SHA-3 | 可变 | 中等 | ✅ 现代标准,NIST 批准 |
| BLAKE2 | 可变 | 非常快 | ✅ 比 SHA-256 更快,高度安全 |
MD5 和 SHA-1 不再被认为对敏感操作具有密码学安全性——研究人员已经展示了实际的碰撞攻击。然而,它们仍然用于非安全校验和(文件去重、缓存键),在这些场景中抗碰撞性不是关键。
哈希的实际用途

1. 文件完整性验证
下载软件时,提供商通常会发布 SHA-256 校验和。下载后,你在本地计算哈希值并进行比较。如果匹配,则文件在传输过程中未被篡改。
2. 密码存储
现代系统从不以明文存储密码。相反,它们存储哈希值(理想情况下使用 bcrypt、Argon2 或 scrypt,而非纯 SHA)。用户登录时,输入的密码被哈希并与存储的哈希值进行比较。
3. 数字签名
要数字签名文档,你需要对文档进行哈希,然后用私钥加密哈希值。接收方可以用你的公钥解密签名,并验证其是否与本地计算的哈希值匹配。

4. 去重和缓存键
内容可寻址存储系统(如 Git)通过哈希值标识对象。两个内容相同的文件具有相同的哈希值,因此只存储一次。
5. 数据结构
哈希表使用哈希将键映射到数组索引,从而实现平均 O(1) 的查找时间。
哈希 vs. 加密 vs. 编码
| 哈希 | 加密 | 编码 | |
|---|---|---|---|
| 可逆 | ❌ | ✅(有密钥) | ✅(总是) |
| 需要密钥 | ❌ | ✅ | ❌ |
| 用于安全 | 完整性/密码 | 机密性 | 数据格式 |
| 示例 | SHA-256 | AES-256 | Base64 |
一个常见错误是使用 Base64“编码”来隐藏敏感数据。Base64 可以轻易逆转,提供零安全性。对于敏感信息,始终使用正确的哈希或加密。
SHA-256 vs SHA-512:如何选择?
SHA-256 是更安全的通用选择——广泛支持、经过充分审计,并且在 32 位和 64 位系统上速度都很快。SHA-512 产生更长的哈希值,并且在 64 位系统上稍快(它操作 64 位字)。对于大多数用途,SHA-256 已经足够。
如何在此工具中对文本进行哈希
- 在输入字段中输入你的文本。
- 选择你想要的算法(MD5、SHA-1、SHA-256、SHA-384、SHA-512、SHA-3)。
- 哈希值会在你的浏览器中实时计算,使用 Web Crypto API。
- 复制输出并在你的应用程序中使用。
没有任何数据发送到服务器——所有计算都在本地进行。
→ 尝试 文本哈希工具