如何生成 MD5、SHA-256 等哈希
哈希将任意输入(密码、文件、消息)转换为固定长度的字符串。相同的输入总是产生相同的哈希,但输入的极小变化会产生完全不同的哈希。这使得哈希对完整性验证、密码存储和数字签名至关重要。
哈希如何工作
哈希函数接收任意大小的输入,产生固定大小的输出:
| 输入 | SHA-256 哈希(前 16 字符) |
|---|---|
| hello | 2cf24dba5fb0a30e... |
| Hello | 185f8db32271fe25... |
| hello! | ce06092fb948d9ff... |
请注意,仅更改一个字符(h 变 H)或添加一个字符,哈希就完全改变。这称为雪崩效应。
常见哈希算法
| 算法 | 长度 | 状态 | 用途 |
|---|---|---|---|
| MD5 | 32 字符 | 已被攻破(不安全) | 旧校验和、非安全用途 |
| SHA-1 | 40 字符 | 已被攻破(不安全) | 仅用于旧系统 |
| SHA-256 | 64 字符 | 安全 | 文件完整性、数字签名 |
| SHA-512 | 128 字符 | 安全 | 高安全性应用 |
SHA-256 是目前大多数用途的标准。MD5 和 SHA-1 只应在与要求它们的旧系统交互时使用。
如何生成哈希
- 选择您的算法· 选择 MD5、SHA-1、SHA-256、SHA-384 或 SHA-512。除非有特殊理由,否则使用 SHA-256。
- 输入文本或上传文件· 输入或粘贴文本,或选择要哈希的文件。
- 复制哈希· 结果是一个十六进制字符串,可用于验证、存储或比较。
实用场景
文件完整性验证· 下载文件并将其哈希与官方发布的哈希对比。如果匹配,文件真实且未损坏。
密码存储· 应用存储密码的哈希,而不是密码本身。登录时,您的输入会被哈希并与存储的哈希对比。
数据去重· 对大文件哈希以快速判断它们是否相同,而无需逐字节比较。
API 安全中的 HMAC· 使用 HMAC(带密钥的哈希)签名 API 请求,确保它们在传输中未被篡改。
小贴士
- 默认使用 SHA-256· 它安全、受广泛支持,是新项目的标准推荐。
- 永远不要为安全用途使用 MD5· MD5 碰撞(不同输入产生相同哈希)可在数秒内生成。它适合非安全校验和,但对需要完整性的场景不行。
- 为密码哈希加盐· 在哈希前为每个密码添加随机盐可防止彩虹表攻击。生产环境中密码哈希请使用 bcrypt 或 Argon2。
- 文件哈希在本地运行· 文件在您的浏览器中处理,因此即使大文件也从不离开您的设备。
常见问题
MD5、SHA-1 和 SHA-256 有什么区别?
MD5 生成 128 位哈希(32 个十六进制字符),SHA-1 生成 160 位(40 个字符),SHA-256 生成 256 位(64 个字符)。MD5 和 SHA-1 被认为在密码学上已被攻破。SHA-256 目前是安全的,推荐用于完整性验证和安全。
可以反向破解哈希以找回原始数据吗?
不可以。哈希函数按设计是单向的。您无法从数学上将哈希反向为其输入。不过,常用密码可以在预计算表(彩虹表)中查找,这就是为什么在哈希前为密码加盐很重要。
什么是 HMAC?
HMAC(Hash-based Message Authentication Code)将哈希函数与密钥结合。它同时验证数据的完整性和真实性 · 证明它未被篡改且由知道密钥的人生成。
我的数据会发送到服务器吗?
不会。所有哈希都通过 Web Crypto API 在您的浏览器中运行。您的文本和文件从不离开您的设备。