哈希生成器

计算任意文本或文件的 MD5、SHA-1、SHA-256、SHA-384、SHA-512、SHA-3、Keccak-256、RIPEMD-160、BLAKE2b 或 BLAKE2s 摘要 —— 是校验和、完整性检查与缓存键的称手工具。粘贴期望的摘要即可对照你的输入进行校验,也可以粘贴一段未知哈希串,识别它可能出自哪种算法。SHA-1/256/384/512 来自浏览器原生 WebCrypto,其余是自包含的纯 JavaScript 实现,因此全部在本地运行。另请参阅随机数生成器获取带种子的随机序列。
完全本地运行 —— 不上传任何内容。输入最大 200 MB。
输入: 算法:
输出格式: SHA-1 已过时 —— 除非确有需要,否则建议优先使用 SHA-256/512。
摘要行采用 “算法名 哈希值” 的形式,方便复制进发布说明或下载清单。
粘贴下载页或清单给出的摘要。本工具能容忍大小写、空格、冒号、sha256= 风格前缀、MD5 (file.exe) = 风格包装以及多行 md5sum 输出,然后与你上方勾选的算法逐一比较。
粘贴一段未知哈希串。工具会读取其长度、字符集与前缀,列出可能产生它的算法 —— 从普通 hex 摘要到 $2b$…、$argon2id$… 之类的 PHC 风格密码哈希。
如何选择算法:
如今做完整性校验,SHA-256 是合理的默认值。SHA-512 更强,在 64 位硬件上运行也更快,代价是输出更长;需要截短长度的 SHA-2 摘要时,SHA-384 是折中选项。SHA-3 是独立设计的 NIST 标准(并非 SHA-2 升级版),当你想要一种与 SHA-2 无共同渊源的算法时,它是标准答案;Keccak-256 是以太坊等系统使用的标准化前变体,与 SHA3-256 只差一个填充字节。BLAKE2b/BLAKE2s 是为软件实现而设计的快速现代哈希;RIPEMD-160 是较老的设计,仍用于比特币与 OpenPGP 场景。对恶意输入而言,SHA-1 和 MD5 在密码学上已被攻破,但用于去重、遗留系统与非对抗性校验和仍然正确且广泛使用 —— 凡是攻击者可能控制内容的场合绝不要用它们。今天没有任何哈希是“抗量子”的 —— 量子计算机首先威胁的是签名与密钥交换 —— Grover 算法只会把有效哈希长度减半,所以 SHA-256 早已稳稳高于实用界限。哈希是确定性的:同样的字节永远产生同样的摘要,这正是它能验证下载或配置文件是否完好的原因。
在找中国国密哈希?
SM3(GB/T 32905-2016)是中国商用密码要求的摘要算法,不在本页 —— 它在SM3 哈希生成器页面有自己的工具(支持 HMAC-SM3),旁边还有 SM 系列的其余成员:SM4(分组密码)、SM2(签名与加密)和SM9(标识密码)。
哈希生成器 —— 从零讲清每一种算法
一句话:密码学哈希函数是一台单向搅拌机 —— 它接收任意数量的字节,把它们压缩成一个固定长度的指纹:同样的输入永远得到同样的指纹,但指纹不会告诉你如何还原输入。本页在你的浏览器标签页里完整运行其中十一种。

下面的每种算法都按同样的四步讲:它是什么(白话版)、不加公式的工作直觉、今天是否还该用它、以及人们最常见的误用。

MD5

它是什么。MD5(1992 年)把任意输入压缩成一个 128 位(32 个 hex 字符)的指纹。它为 1990 年代计算机的速度而设计,而且确实很快 —— 这正是它至今无处不在的原因:软件下载页、文件去重缓存、遗留数据库键。

工作直觉。输入被切成 64 字节的块。每一块被四次(四轮略有不同的混合轮次)搅进一个 128 位的滚动状态,最后一块处理完后,把状态打印出来就是摘要。这种搅拌由加法、循环移位和查表构成 —— 当年便宜,现在也便宜。

还该用它吗?对于没人想作弊的校验和场景 —— 检测损坏的下载、查找重复文件 —— 它仍然能完美报告损坏。但对任何对抗性场景,不行:自 2004 年起,研究人员可以在几秒内构造出两个 MD5 相同的不同文件,2008 年还发生过利用 MD5 碰撞的真实证书伪造事件。把它当序列号用,别当锁用。

常见误区。用 MD5 存密码(它太快了 —— 适合密码的算法见密码哈希生成器);因为“MD5 对上了”就信任文件,而攻击者同样公布了这个 MD5;以及把 MD5 (file) = hash 整行而不是仅哈希部分粘贴进去 —— 上面的校验框两种都接受。

SHA-1

它是什么。SHA-1(1995 年,NSA)产生 160 位(40 个 hex 字符)的摘要。二十年间它一直是 Git、TLS 证书和 PGP 签名的默认完整性哈希。

工作直觉。与 MD5 同一家族配方,但状态是 160 位,每个 64 字节块要做 80 轮混合,操作种类也更多。多出来的轮次本意是让这台搅拌机更难被逆向。

还该用它吗?对抗性场景一律不用。2017 年 Google 造出两个 SHA-1 相同的不同 PDF(SHAttered 攻击,约 6500 CPU 年),理论破解成为现实。Git 至今仍以 SHA-1 存储对象,但只把它当标识符,并已加入碰撞检测。新项目请用 SHA-256 或 SHA-3。

常见误区。以为 160 位“还是够长” —— 破坏来自内部结构,与暴力穷举无关;以及把 RIPEMD-160 和 SHA-1 混为一谈,因为两者都是 40 个 hex 字符(上方识别框能区分它们)。

SHA-2:SHA-256、SHA-384 与 SHA-512

它是什么。SHA-2 家族(2001 年,NSA)是现代完整性校验的主力。SHA-256 给出 256 位(64 个 hex 字符),SHA-512 给出 512 位,SHA-384 是把 SHA-512 的结果截短到 384 位 —— 协议要求更短标签时很有用。

工作直觉。64 字节(512 位变体为 128 字节)的块经过 64(或 80)轮加-移-混步骤折叠进一个 8 字状态。与 MD5 不同,消息调度会先把每块拉伸进一个扩展缓冲区,正是这一点击垮了攻破 MD5 和 SHA-1 的那类攻击。一个有趣的事实:在 64 位 CPU 上 SHA-512 比 SHA-256 更快,因为它每轮用 64 位算术处理两倍的数据。

还该用它吗?用 —— 如今文件校验和、代码签名与证书指纹的默认答案就是 SHA-256,经过二十年分析没有已知实用破解。想要更大余量或平台跑得更快时,用 SHA-384/512。

常见误区。单用 SHA-256 存密码——它是快哈希,而快正是密码场景的大敌(请用 bcrypt/scrypt/Argon2id);以及在对抗性碰撞场景里把摘要长度当成强度——长度只是上限。

SHA-3(SHA3-256 / SHA3-512)与 Keccak-256

它是什么。SHA-3(2015 年,由 Bertoni、Daemen、Peeters 和 Van Assche 的 Keccak 提案标准化)是 NIST 的第三个哈希标准。它与 SHA-2 内部毫无共享 —— 入选的理由恰恰是作为 SHA-2 万一失守时的独立备份。

工作直觉。Keccak 不是把块搅过一个小状态,而是反复“吸收再挤出”:输入逐位吸收进一个 5×5×64 位的海绵,整个海绵用固定置换搅乱(对整个状态做 24 轮位运算),然后挤出摘要位。海绵图像就是全部思想:容量位永远不会被输出,而它们正是这个函数单向性的来源。

Keccak-256 与 SHA3-256。两者只差一个填充字节。Keccak 团队的原始提案用 0x01 填充最后一个块;NIST 把标准填充改成了 0x06(为了与 SHA-2 时代的 Keccak 用法做域分离)。以太坊采用了原始填充,所以它的“keccak256”对每个输入都与标准 SHA3-256 不同。本页两者都提供,分开勾选。

还该用它吗?用 —— 策略要求非 SHA-2 算法时它是首选,生态已经在用的地方照用。常见误区:以为 SHA3-256 和 Keccak-256 可以互换(不可以 —— 对同一输入比较本页输出的两行就知道);以及以为“SHA-3”取代了 SHA-2 —— 两者都安全,SHA-2 仍是部署更广的那个。

RIPEMD-160

它是什么。RIPEMD-160(1996 年,欧洲学界 RIPE 联盟,由 Dobbertin、Bosselaers 和 Preneel 强化)输出 160 位。它是完全的欧洲设计,刻意独立于 NSA 设计的 SHA 家族。

工作直觉。每个 64 字节块由两条并行的 80 轮流水线以不同的常量和移位量处理;最后把两条线和旧状态合并。双轨结构是设计者用来抵抗当年正在攻破其他 1990 年代哈希的差分攻击的手段。

还该用它吗?实践中它主要活在其他系统内部:比特币地址用 RIPEMD-160(SHA-256(pk)) 哈希公钥,较老的 OpenPGP 密钥把它作为哈希选项,它也是 BitTorrent v1 piece 与 SHA-1 并列的传统哈希。它没有实用碰撞攻击,但 160 位的体量让它在本书页里安全余量最小。新的独立用途请优先 SHA-256 或 SHA-3。

常见误区。以为两条并行线让它“强两倍” —— 限制碰撞抗性的是输出体量;以及把它和 SHA-1 混淆(同样 40 个 hex 字符;上方识别框会把两者并列列出)。

BLAKE2b-512 与 BLAKE2s-256

它是什么。BLAKE2(2013 年,Aumasson、Neves、Wilcox-O'Hearn 和 Winnerlein)是为软件速度设计的哈希:BLAKE2b 面向 64 位平台、最多 512 位输出,BLAKE2s 面向 32 位平台、最多 256 位输出。

工作直觉。它源自 SHA-3 决赛选手 BLAKE,核心是从流密码 ChaCha 借来的置换:一个 4×4 的字矩阵被列方向与对角线方向交替的混合步骤打乱 —— 像先把网格从上到下洗一遍、再沿对角线洗一遍 —— 每块 12(BLAKE2b)或 10(BLAKE2s)轮。这些步骤与 CPU 指令完美对应,所以 BLAKE2 常常比 MD5 还快,同时提供与 SHA-3 相当的安全性。

还该用它吗?用 —— 它是完全现代、未被攻破的设计,在性能敏感的软件中很受欢迎(某些生态的包完整性、内容寻址存储、备份去重),也用作快速 MAC。本页上 BLAKE2b-512 给出最长的摘要,BLAKE2s-256 是紧凑的现代选项。

常见误区。以为“更快一定更弱” —— BLAKE2 的快是设计出来的,不是偷工减料;以及不知道 BLAKE2 还接受密钥(变成 MAC)或个性化字符串 —— 本页始终使用无密钥的普通模式。

读懂校验框与识别框

校验。校验框会先把你粘贴的内容规范化 —— 大小写、每两位一个冒号、sha256= 前缀、BSD 风格的 SHA256 (file) = hash 包装、哈希在后的 GNU md5sum 行、游离的 \r\n —— 然后对你当前的输入(文本或所选文件)重新计算每种勾选的算法,报告匹配的算法。绿色匹配意味着“这些字节正是发布方哈希的那些”;红色意味着勾选的算法都没能产生它 —— 试试勾选更多算法,或检查粘贴是否被截断。

识别。识别框不做任何哈希;它读取字符串的形状。长度先缩小候选:32 个 hex 字符可能是 MD5,40 可能是 SHA-1 或 RIPEMD-160,64 可能是 SHA-256 / SHA3-256 / Keccak-256 / BLAKE2s-256,96 是 SHA-384,128 是 SHA-512 / SHA3-512 / BLAKE2b-512。前缀会暴露密码哈希($2a$/$2b$/$2y$ bcrypt、$argon2id$、$scrypt$、$6$ sha512crypt、$1$ MD5-crypt)—— 那是另一个物种(见密码哈希生成器),本页刻意不计算它们。含有 +、/ 和 = 且长度是 4 的倍数的字符串更像 Base64 编码的数据而不是 hex 摘要;工具会解码并报告对应的字节长度。

识别能告诉你什么、不能告诉你什么。长度和字符集是格式的指纹,不是算法的证明:两个 64 hex 字符的字符串可能来自 SHA-256,也可能来自截短的 SHA-512。识别框给可能性排序;校验框才是真正证明你的字节匹配哪种算法的那一个。

十一种算法一览
算法 摘要长度 问世 “The quick brown fox jumps over the lazy dog” 的摘要
MD5128 位19929e107d9d372bb6826bd81d3542a419d6
SHA-1160 位19952fd4e1c67a2d28fced849ee1bb76e7391b93eb12
SHA-256256 位2001d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592
SHA-384384 位2001ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1
SHA-512512 位200107e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6
SHA3-256256 位201569070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04
SHA3-512512 位201501dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450
Keccak-256256 位2015 年前4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15
RIPEMD-160160 位199637f332f68db77bd9d7edd4969571ad671cf9dd3b
BLAKE2b-512512 位2013a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918
BLAKE2s-256256 位2013606beeec743ccbeff6cbcdf5d5302aa855c256c29b88c8ed331ea1a6bf3c8812

上表中的每个摘要都由本页的引擎亲自算出 —— 勾选全部算法、点击样例、逐项对比即可验证。SHA-3、Keccak、RIPEMD-160 与 BLAKE2 各行来自本站加密工具共用的自托管 crypto-shared.js 内核。

常见问题

验证下载该信哪个框?校验框,勾选 SHA-256 —— 如今大多数发布方都签发 SHA-256 或 SHA-512。识别框只给出候选名单,它永远无法证明任何关于你文件的事。

为什么列表里会有 Keccak-256?因为以太坊、Swarm 等少数账本系统标准化的是标准化前的填充。验证以太坊 keccak256 时必须用那一行,而不是 SHA3-256。

两个不同输入能有相同摘要吗?理论上可以 —— 无限多的输入映射进有限的摘要集合(鸽笼原理)。实践层面,在宇宙热寂之前找到这样一对输入,正是“抗碰撞性”要衡量的事,上述算法中除 MD5 和 SHA-1 外至今都站得住。

哈希是加密吗?不是。加密可以用密钥还原;哈希是单向搅拌机。本页没有任何东西能把摘要“解密”回你的文本 —— 这是特性,不是缺陷。