同一算法,输入只改一点
hello world
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
Hello world
4ae7c3b6ac0beff671efa8cf57386151c06e58ca53a78d83f36107316cec125f
只改了一个大写字母,哈希值就完全不同了。这就是“雪崩效应”,正是这个特性让哈希可以用来检测改动。
即时生成 MD5、SHA-1、SHA-256、SHA-384 和 SHA-512 哈希值。
最后更新
Coddy 让你在浏览器里编写真实代码来学习:互动课程、即时反馈,卡住时还有 AI 帮忙。
哈希生成器会计算出一个哈希值:某个输入的简短、固定长度的“指纹”。哪怕只差一个字符,指纹也会大幅变化,所以哈希被用来校验文件完整性、在不完整比较的情况下判断两个值是否相等、构建内容寻址系统(Git 使用 SHA-1/SHA-256),也是更大型安全协议中的基础组件。
一个好的加密哈希函数有三个特性:确定性(同样的输入 → 同样的哈希值)、单向性(无法从哈希值还原输入)和抗碰撞性(几乎不可能找到两个哈希值相同的输入)。SHA-256 和 SHA-512 等现代算法满足全部三点;MD5 和 SHA-1 等老算法已经被攻破,不应该用于涉及安全的比较。
哈希不是加密。加密可以用密钥还原;哈希在设计上就是单向的。哈希本身也不是存储密码的机制:密码需要 bcrypt、scrypt 或 Argon2 这样的密码哈希,它们会刻意提高暴力破解的成本。
粘贴任意文本:一个字符串、一段 JSON、一个许可证密钥。哈希值会随着输入实时更新。
选择 MD5、SHA-1、SHA-256、SHA-384 或 SHA-512。对于通用校验和,SHA-256 是最安全的默认选择。
哈希值以小写十六进制显示。可以切换成大写,或把值复制到剪贴板。
粘贴一个已知的哈希值(来自下载页面、Git 提交或校验和文件),工具会告诉你是否匹配。
最常见的几种算法,以及它们的输出长度和当前的安全状况。SHA-1 的规范见 RFC 3174;SHA-2 系列的规范见 NIST FIPS 180-4。
| 算法 | 输出长度 | 状况 / 常见场景 |
|---|---|---|
| MD5 | 128 位 / 32 个十六进制字符 | 已攻破:只适合与安全无关的校验和 |
| SHA-1 | 160 位 / 40 个十六进制字符 | 已攻破:仅见于 Git 历史和老旧系统 |
| SHA-256 | 256 位 / 64 个十六进制字符 | 标准:TLS、新版 Git、区块链 |
| SHA-384 | 384 位 / 96 个十六进制字符 | 用于偏好 SHA-2 系列的 TLS 加密套件 |
| SHA-512 | 512 位 / 128 个十六进制字符 | 强:在 64 位硬件上有时比 SHA-256 更快 |
| bcrypt / scrypt / Argon2 | 不固定 | 密码哈希:存储密码请用这些,而不是 SHA-x |
hello world
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
Hello world
4ae7c3b6ac0beff671efa8cf57386151c06e58ca53a78d83f36107316cec125f
只改了一个大写字母,哈希值就完全不同了。这就是“雪崩效应”,正是这个特性让哈希可以用来检测改动。
SHA256: 3a7bd3e2360a3d290dd0b1aef6a04e9b… ubuntu.iso计算你下载的文件的 SHA-256,再和发布方给出的值对比。一致就说明文件在传输中没有损坏,也没有被篡改。
操作系统镜像、编程语言运行时和签名发布包的下载页面,通常会在文件旁边公布 SHA-256。安装前一定要校验。
user@example.com
b58996c504c5638798eb6b511e6f49af
Gravatar 用 MD5(email) 作为头像的键。MD5 用在这种非机密的标识符上没问题,但凡是碰撞或原像攻击会造成影响的地方,都不要用它。
== 比较十六进制哈希值。比较前先去掉空白并统一大小写。哈希函数接收任意长度的输入,生成一个固定长度的输出,叫作哈希值。同样的输入总是得到同样的哈希值;输入哪怕只有一点点变化,哈希值也会完全不同。
MD5 在密码学用途上已经被攻破,实际的碰撞很容易算出来。它仍可用于与安全无关的校验和(文件去重、缓存键、Gravatar),但绝不能用于签名、证书或密码存储。
两者都属于 SHA-2 系列。SHA-256 输出 256 位;SHA-512 输出 512 位。在 64 位硬件上,SHA-512 实际可能更快。如今各种协议更常用 SHA-256 作为默认选择。
不要直接用 SHA-256。请使用专门为此设计的密码哈希(bcrypt、scrypt 或 Argon2),为每个用户加盐,并设置可调的计算成本。它们刻意设计得很慢,让暴力破解代价高昂。
不可以,哈希函数在设计上就是单向的。想得到原始输入,唯一的办法是不断猜测输入,再检查它们的哈希值是否匹配。所以对密码来说,加盐和慢速哈希才那么重要。