哈希
生成 SHA-1、SHA-256、SHA-384、SHA-512 哈希
不提供 MD5 — 它在加密上已被破坏,并且在浏览器的 SubtleCrypto API 中不可用。使用 SHA-256 或更强的算法。
什么是加密哈希?
加密哈希函数将任何输入 — 一个字符、一个 5 页的文档 — 转换为固定长度的十六进制字符串。SHA-256 始终生成 64 个十六进制字符;SHA-512 生成 128 个。两个关键特性:相同的输入始终生成相同的哈希,并且计算上不可行找到两个不同的输入具有相同的哈希(碰撞抵抗)。
哈希用于文件完整性检查(下载文件?将其 SHA-256 与发布的值进行比较)、密码存储(服务器存储哈希,而不是密码)、HMAC 签名和内容寻址存储(Git 使用 SHA-1 来识别提交)。
使用场景
- 验证下载完整性——把下载文件的 SHA-256 跟官方公布的 checksum 对比,确认未被篡改。
- 检测重复内容——对字符串或文件内容做哈希,不存原文就能识别重复。
- 生成缓存 key——把长输入(URL、query string、请求体)压成定长字符串,喂给 Redis 或 Memcached。
- 审计 Git 对象——离开 Git plumbing 自己算 SHA-1,对照 blob/tree 对象地址。
示例
| 输入 | 结果 |
|---|---|
| hello | SHA-256: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 |
| (empty string) | SHA-256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
常见问题
为什么不使用 MD5?
MD5 在加密上已被破坏 — 碰撞可以在几秒钟内在笔记本电脑上生成。浏览器的 SubtleCrypto API 故意不公开它。使用 SHA-256 或更强的算法。
我可以哈希一个文件吗?
此工具哈希文本输入。要哈希文件,请在浏览器控制台中输入:`crypto.subtle.digest('SHA-256', await file.arrayBuffer())`。
哈希在多次运行中是确定性的吗?
是的 — 'hello' 的 SHA-256 始终是相同的值。哈希函数是纯粹的(无盐,无随机性)设计。
我应该使用 SHA-1 吗?
避免用于新应用 — 它已被破解以进行碰撞攻击。SHA-1 在文件校验和和 Git 中仍然常见,但对于任何与安全相关的内容,请使用 SHA-256。
我的输入会发送到任何地方吗?
不会。哈希使用浏览器的本地加密 API;没有数据离开您的设备。
