字符串哈希可视化器,免费
输入文本以计算并可视化比较 MD5、SHA-1、SHA-256 和 SHA-512 哈希,配有彩色区块。
工作原理
- 输入您的文本:输入或粘贴任意字符串 · 密码、文件内容、ID 或任何需要哈希的文本。
- 选择算法:根据需要选择 MD5、SHA-1、SHA-256、SHA-384 或 SHA-512。
- 复制哈希:哈希值会立即显示。复制用于存储、比较或验证。
为什么使用字符串哈希生成器?
哈希将任意字符串转换为该内容特有的固定长度指纹。即使修改一个字符也会产生完全不同的哈希值。这对于验证数据完整性、安全地存储密码、生成缓存键、去重记录和创建基于内容的 ID 至关重要。由于哈希是单向的,无法从哈希反推原文 · 这使得它能安全地存储敏感数据。
功能特性
- 多种算法:MD5、SHA-1、SHA-256、SHA-384 和 SHA-512 集合在一个工具中。
- 实时哈希:输入时哈希实时更新 · 无需按钮点击。
- 大小写敏感:根据设计,「Hello」和「hello」会产生不同哈希。
- 复制到剪贴板:一键复制哈希。
- 100% 浏览器内:字符串从不离开您的设备 · 对敏感内容安全。
常见问题
该选择哪种哈希算法?
对安全用途(密码、签名),使用 SHA-256 或 SHA-512。MD5 和 SHA-1 因安全原因已被弃用,但仍可用于不需要密码学强度的校验和和缓存键。
可以用此工具对要存储的密码进行哈希吗?
字符串哈希给您单向哈希值,但要存储密码,您需要使用含盐和迭代的密钥派生函数(如 bcrypt、Argon2 或 PBKDF2)。简单的 SHA 哈希速度太快,易受彩虹表攻击。
哈希是可逆的吗?
不可逆。哈希函数是单向的 · 无法从哈希恢复原始字符串。如果两个字符串产生相同哈希(碰撞),则是算法的缺陷。SHA-256 和 SHA-512 目前无已知实际碰撞。
哈希函数35年的历史:从MD5到BLAKE3
密码学哈希函数通过一长串的破解和替换循环进化。MD5由Ronald Rivest在RFC 1321(1992年4月)中作为MD4的继承者发布。它的128位输出被认为足够强大十多年,直到Wang和Yu在2004年发布了第一次实际碰撞。到2008年,研究人员已经使用MD5碰撞伪造了一个流氓SSL证书颁发机构。SHA-1由NSA设计并由NIST在FIPS 180-1(1995)中标准化。它的160位输出持续到2017年2月,当时Google和CWI Amsterdam宣布了SHAttered攻击,产生了两个具有相同SHA-1哈希的PDF。成本:在GPU上约6,500 CPU年等效。SHA-2(SHA-224、SHA-256、SHA-384、SHA-512)也来自NSA,发布在FIPS 180-2(2002年8月)。它使用与SHA-1相同的Merkle-Damgård构造,但具有更大的状态和更多轮次;今天对完整版本没有实际攻击。SHA-3(Keccak,由Bertoni等人)在NIST公开竞赛后被选中,并在FIPS 202(2015年8月)中标准化。SHA-3使用完全不同的海绵构造,对影响SHA-2的长度扩展攻击免疫。在NIST家族之外,BLAKE2(Aumasson等人,2012)和BLAKE3(2020)提供与SHA-3级别的安全性和MD5的速度;BLAKE3在现代笔记本电脑上约一秒钟哈希1 GB文件。
选择哪种算法:快速决策表
- MD5(128位)。自2004年破解。可接受用于非安全用途:缓存清除、你控制两端的文件去重、防止意外损坏的校验和。从不用于密码、签名或任何对抗性环境。
- SHA-1(160位)。自2017年破解(SHAttered)。Git仍然将其用于提交哈希,但在2017年3月,Git开始嵌入碰撞检测(SHA-1DC)以拒绝已知的攻击模式。新代码避免使用SHA-1。
- SHA-256(256位)。当前的主力。被比特币、TLS证书、Linux软件包签名、JWT签名(HMAC-SHA256)和大多数现代API使用。硬件中快速(Intel SHA扩展、ARMv8加密扩展)。通用哈希的默认选择。
- SHA-512(512位)。同一家族,更大的输出。在64位机器上略快于SHA-256,因为其内部状态是64位。当你需要额外的碰撞抵抗或当256位感觉受限时使用(罕见)。
- SHA-3 / Keccak(224/256/384/512位)。标准化的海绵构造SHA-2替代品。对影响SHA-2的长度扩展攻击具有抵抗力(在没有HMAC的情况下构建带密钥哈希时相关)。在大多数CPU上软件比SHA-256慢,但对不同类别的攻击免疫。
- BLAKE2 / BLAKE3。现代的非NIST替代品。BLAKE3是最快的广泛可用的密码学哈希,由于并行性以大致memcpy速度哈希。用于
b3sum、IPFS和WireGuard VPN协议。尚未在crypto.subtle中,但可通过库获得。
哈希实际使用的地方
- 文件完整性验证。Linux发行版在ISO下载旁边发布SHA-256校验和,以便你可以验证文件在传输过程中未被损坏或被攻击者修改。
sha256sum -c ubuntu.sha25610秒完成。 - 内容寻址存储。Git使用SHA-1(过渡到SHA-256)来识别每个提交、树和blob。IPFS、Docker镜像(sha256:...)和Nix store路径都使用内容寻址。哈希就是标识符。
- 缓存键。对URL或序列化请求进行哈希为你提供适合任何存储系统的固定长度键。Stripe、GitHub、每个CDN都使用此进行缓存查找。
- 去重。备份系统(Time Machine、Borg、Restic)对文件块进行哈希并仅存储唯一的。不同文件中两个相同的4 KB块映射到一个存储的块。
- HTTP ETags。Web服务器将响应的哈希作为
ETag标头发送。浏览器用If-None-Match发送回来;如果未更改,服务器返回304。节省冗余下载。 - JWT和webhook签名。JSON Web Tokens使用HMAC-SHA256(规范中的HS256)签署其负载。Stripe、GitHub、Twilio webhooks都签署其负载,以便你可以验证它们在传输过程中未被篡改。
- 区块链。比特币使用双SHA-256进行工作量证明和区块链接。以太坊使用Keccak-256(SHA-3变体)。区块链的整个概念依赖于找到两个具有相同哈希的输入在计算上不可行的属性。
损失金钱或破坏东西的哈希错误
- 使用SHA哈希进行密码存储。SHA-256很快:现代GPU每秒计算~100亿个SHA-256哈希。使用泄露的数据库,攻击者可以在几分钟内尝试字典中的每个单词加上所有常见变换。使用Argon2id(2015年密码哈希竞赛获胜者)、bcrypt或scrypt。它们故意慢且内存密集。
- 忘记加盐。即使使用慢哈希,无盐哈希的相同密码在用户之间产生相同的输出,启用彩虹表和侧通道检测重复密码。始终在哈希旁边存储每用户随机盐。
- SHA-2上的长度扩展攻击。SHA-256的
hash(secret + message)是脆弱的:知道哈希和secret长度的攻击者可以附加任意数据并计算结果哈希而不知道secret。改用HMAC-SHA256。SHA-3和BLAKE2/3免疫。 - 恒定时间字符串比较。在JavaScript中使用
==比较哈希(或任何秘密值)通过时序泄漏信息:在第一个字节不匹配时退出的函数让攻击者在许多请求中逐字节学习正确的哈希。使用Node中的crypto.timingSafeEqual,Python中的hmac.compare_digest。 - 不指定编码就哈希字符串。Python 3中的
sha256("hello")错误(你需要字节);在Node中默认为UTF-8;在PHP和Java中默认可能不同。不同的编码产生不同的哈希。在哈希之前始终明确编码为UTF-8。 - 截断哈希为「短ID」。SHA-256的64位切片对短ID很方便,但生日悖论意味着碰撞出现在~2³²项(约40亿),而不是2⁶⁴。如果截断,在预期规模上规划碰撞处理。
- 将哈希输出视为URL安全字符串。原始哈希字节不可打印。使用hex(最常见)或base64url。标准base64包含
+和/,在URL和文件名中会断开;base64url是安全变体。
更多常见问题
为什么MD5和SHA-1「破解」如果它们仍然产生哈希?
「破解」意味着攻击者可以比暴力破解更快地产生碰撞。对于MD5,在今天的笔记本电脑上找到两个具有相同哈希的输入需要几秒钟。对于SHA-1,2017年需要6,500 CPU年,自那以后急剧下降。哈希在机械上仍然有效;破解的是它们是「抗碰撞」的安全保证。对于非对抗性使用(对你信任的文件进行校验和以防止意外损坏),MD5仍然工作良好。对于任何涉及对手的事情,两者都不安全。
我应该担心量子计算机破解SHA-256吗?
比你想象的要少。Grover算法将对256位哈希的原像攻击从2²⁵⁶加速到2¹²⁸经典等效工作,这仍然实际上不可能。对称原语(哈希、AES)通过加倍密钥/输出大小在量子计算中生存。公钥密码学(RSA、ECDSA)是量子攻击下严重失败的,因此NIST后量子标准在2024年8月发布(ML-KEM、ML-DSA、SLH-DSA)。如果你今天使用SHA-256,在后量子时代SHA-512将绰绰有余。
哈希和HMAC之间有什么区别?
哈希(SHA-256)是无密钥的:任何拥有输入的人都可以计算相同的输出。HMAC(基于哈希的消息认证码)使用秘密密钥包装哈希,因此只有知道密钥的人才能计算或验证标签。在RFC 2104(1997)中定义,HMAC是对称地「签署」消息的标准方式(发送者和接收者共享一个秘密)。对webhook签名、JWT HS256、API请求签名使用HMAC-SHA256。secret + message上的简单SHA-256由于长度扩展而不安全。
为什么不同的库为同一字符串给出不同的哈希?
三个常见原因。首先,字符编码:UTF-8 vs UTF-16 vs Latin-1为非ASCII字符串提供不同的字节,因此不同的哈希。始终明确编码。其次,行尾:"hello\n"和"hello\r\n"哈希不同;Windows-vs-Unix文件校验和经常因此而不同。第三,输出格式:小写hex vs大写hex vs base64看起来像不同的值但表示相同的字节。在比较之前规范化输入和输出格式。
当我在这里哈希时,我的输入是否发送到服务器?
不。所有四个哈希都使用内置的Web Crypto API(crypto.subtle.digest)在你的浏览器中计算。在DevTools中打开网络选项卡并在输入中键入,你将看到零出站请求。对凭据、令牌或你想要哈希而不让它离开你的设备的任何私有值都是安全的。