SHA-3 哈希生成器(Keccak SHA3-256)
免费在线生成 SHA-3 哈希值。NIST FIPS 202 海绵构造——SHA-2 后的新一代标准。SHA3-256 输出 64 个十六进制字符。纯浏览器运行,通过懒加载 js-sha3 实现,零上传。
什么是 SHA-3?
SHA-3(安全哈希算法 3)是 NIST 安全哈希标准的第三代,于 2015 年 8 月在 FIPS 202 中标准化。与基于 Merkle-Damgård 构造的 SHA-1 和 SHA-2 不同,SHA-3 使用一种从根本上不同的设计,称为海绵构造——NIST 有意做出这一选择,以确保 SHA-2 的密码分析破解不会自动危及 SHA-3。
NIST SHA-3 竞赛(2007–2012 年):NIST 于 2007 年面向全球征集公开提案。经过三轮评选,64 个候选方案被缩减至 5 个决赛入围者:BLAKE、Grøstl、JH、Keccak 和 Skein。2012 年 10 月,来自意法半导体和恩智浦半导体的 Guido Bertoni、Joan Daemen、Michaël Peeters 和 Gilles Van Assche 设计的 Keccak 被选为获胜者。所有 5 个决赛入围者均被认为是安全的;Keccak 独特的基于海绵的设计给了它 NIST 优先考虑的结构多样性。
海绵构造:SHA-3 在吸收阶段将输入吸收到 1600 位状态(Keccak-f[1600] 置换),然后在挤压阶段从状态中挤压出输出位。对于 SHA3-256,速率/容量分割为 1088/512 位。由于 1600 个内部状态位中只有 256 个出现在输出中,攻击者无法从哈希值重建完整状态——使长度扩展攻击在结构上不可能。这与 SHA-256 形成对比,后者在输出中暴露完整内部状态,需要 HMAC 来防止长度扩展。
SHA-3 与 Keccak——填充差异:NIST 通过将域分隔填充从 0x01 改为 0x06 修改了原始 Keccak 提案。这意味着 NIST SHA3-256 和原始 Keccak-256 对每个输入都产生不同的 64 字符十六进制输出。这不是理论问题——这正是以太坊的 keccak256(在 FIPS 202 最终确定前冻结)与本工具对相同字符串的 SHA3-256 输出不同的原因。切勿使用本工具复现以太坊地址派生。
FIPS 202 定义了四种 SHA-3 变体:SHA3-224(56 字符)、SHA3-256(64 字符)、SHA3-384(96 字符)、SHA3-512(128 字符)。本工具实现 SHA3-256,这是最常见的变体,也是与 SHA-256 最直接可比的。
库说明:SHA-3 尚未进入浏览器的 Web Crypto API 规范(crypto.subtle 仅支持 SHA-1、SHA-256、SHA-384、SHA-512)。本工具首次使用时懒加载 js-sha3 JavaScript 库(~10 KB 压缩后)。此次单次下载后,所有计算均在你的浏览器中本地运行——不会传输任何输入数据。
何时使用 SHA-3:需要与 SHA-2 结构多样性的新协议;不使用 HMAC 包装的带密钥 MAC(KMAC128/256,参见 NIST SP 800-185);作为 SHA-2 备用方案的后量子对冲;符合要求 FIPS 202 的系统合规要求。何时坚持使用 SHA-256:通用库支持、硬件加速(SHA-NI 扩展)、现有协议兼容性,以及 SHA-256 已是既定标准的大多数日常完整性用途。
// SHA-3 (NIST FIPS 202 SHA3-256) using js-sha3 library
import { sha3_256 } from 'js-sha3';
const hash = sha3_256('Hello, World!');
// → '882f4b6991a775295186a4e3cc5ece9fc0b618c8c3e7a7beafdd0f56f13ae43b'
// Note: this differs from Ethereum's keccak256 for the same input:
// keccak256('Hello, World!') = 'acaf3289d7b601cbd114fb36c4d29c85bbfd5e133f14cb355c3fd8d99367964f'
// The difference is the padding byte: 0x06 (SHA-3) vs 0x01 (original Keccak) SHA-3 示例
验证 NIST FIPS 202 测试向量
abc
3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532
SHA3-256("abc") = 3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532——这是官方 NIST FIPS 202 测试向量。将 "abc" 粘贴到工具中并确认输出完全一致,即可验证你使用的是 NIST SHA-3(而非原始 Keccak)。这个简单测试能将符合 FIPS 的 SHA-3 实现与使用旧 Keccak 填充字节的实现区分开来。
Keccak 与 SHA-3 的区别——相同输入,不同输出
Hello
本工具(NIST FIPS 202)计算的 SHA3-256("Hello") = 8ca66ee6b2fe4bb928a8e3cd2f508de4119c0895f22df86f0ab7e30e487e4500。以太坊的 keccak256("Hello") = 06b3dfaec148fb1bb2b066f10ec285e7c9bf402ab32aa78a5d38e34566810cd2。相同输入,不同的 64 字符十六进制输出。差异在于填充后缀:NIST SHA-3 使用 0x06,而原始 Keccak(以太坊于 2013 年冻结的版本)使用 0x01。以太坊早于 NIST 2015 年的标准化,与 FIPS 202 变体产生了永久分叉。
后量子归档哈希
NIST SP 800-57 Part 1 Rev 5 — Recommendation for Key Management
SHA3-256 提供 128 位原像阻力以对抗量子计算机上的 Grover 算法——与 SHA-256 对抗量子攻击时相同的有效安全级别。对于必须在 2050 年以后保持防篡改性的数据,同时使用 SHA-3 和 SHA-256 提供了纵深防御:如果某种算法的构造(SHA-2 的 Merkle-Damgård;SHA-3 的 Keccak 海绵)被发现漏洞,另一种仍然安全。机构档案和政府文档越来越多地使用双哈希清单(SHA-256 + SHA3-256)作为对冲手段。另见 SHA-256 生成器(该对冲的 SHA-2 一侧)。
HMAC-SHA3-256 带密钥认证
POST /api/ledger
{"amount":250000,"from":"acct-A","to":"acct-B"} HMAC-SHA3-256 是 HMAC-SHA-256 用于带密钥消息认证的现代替代方案。由于 SHA-3 的海绵构造原生具有长度扩展免疫性(挤压阶段丢弃内部状态),纯 SHA3-256 带密钥 MAC(KMAC,定义于 NIST SP 800-185)也是安全的——与原始 SHA-256 不同,后者需要 HMAC 包装来防御长度扩展攻击。对于新的高保证 API 和金融系统,HMAC-SHA3-256(或 KMAC128)比 HMAC-SHA-256 提供更强的架构保证。在此粘贴规范请求体,可在应用 HMAC 前检查 SHA3-256 指纹。
如何生成 SHA-3 哈希值
- 1
将文本粘贴到输入框
选择「文本」选项卡,输入或粘贴任意字符串。SHA3-256 哈希值会随输入实时更新。首次使用时,js-sha3 库(~10 KB)会被获取并缓存——第一次哈希时可能会有短暂延迟;之后所有哈希计算均即时完成。算法已设置为 SHA-3(NIST FIPS 202 SHA3-256)。
- 2
复制 64 字符十六进制输出
点击哈希结果旁的「复制」按钮。64 字符小写十六进制字符串已复制到剪贴板。如果目标系统需要大写,可使用「大写」切换。此输出与任何符合 FIPS 202 的 SHA3-256 实现的结果一致——但请注意,对于相同输入,它与以太坊的 keccak256 不同。
- 3
使用「对比」选项卡进行验证
切换到「对比」选项卡,并排粘贴两个 SHA3-256 哈希值。工具使用恒定时间比较报告匹配或不匹配,不会泄漏时序信息。适用于验证 NIST CAVP 测试向量、核查档案清单,或确认两个 SHA3-256 实现产生相同输出。
技术细节
- 算法:Keccak-f[1600] 海绵构造
- SHA3-256 以速率=1088 位、容量=512 位的海绵构造应用 Keccak-f[1600] 置换(对 5×5×64 状态数组执行 24 轮 theta、rho、pi、chi、iota 运算)。输入以 136 字节(1088 位)块吸收;256 位输出被挤压出来。FIPS 202 域分隔符在填充前追加 0x06。实现:NIST FIPS 202(2015 年)第 6 节。
- 输出:默认 SHA3-256,64 个十六进制字符(FIPS 202 还定义了 224/384/512)
- 本工具输出 SHA3-256:始终恰好为 64 个十六进制字符(256 位 = 32 字节)。NIST FIPS 202 还标准化了 SHA3-224(56 字符)、SHA3-384(96 字符)和 SHA3-512(128 字符)——所有变体使用相同的 Keccak-f[1600] 置换,仅速率/容量分割不同。无论输入大小,输出长度固定。
- 性能:懒加载 js-sha3(~10 KB);浏览器中约 150–400 MB/s
- 与 SHA-2 路由(使用浏览器原生 Web Crypto API)不同,SHA-3 尚未进入 Web Crypto 规范。本工具首次使用时加载 js-sha3 库(~10 KB 压缩后),然后缓存。典型吞吐量:JavaScript 中约 150–400 MB/s,而 SHA-256 通过 Web Crypto 可达 400–700 MB/s。对于文本哈希(千字节级),差异几乎不可察觉。其他 SHA 路由的主要包不受此懒加载影响。
- 标准:NIST FIPS 202(2015 年)、NIST SP 800-185(KMAC)、NIST IR 8105
- 在 FIPS 202(2015 年 8 月)中标准化。NIST SP 800-185(2016 年)定义了 KMAC128 和 KMAC256——基于 SHA-3 的带密钥 MAC 函数,原生具有长度扩展免疫性,无需 HMAC 包装。NIST IR 8105 推荐 SHA-3 变体用于后量子安全裕度。根据 NIST SP 800-131A Rev 2,当前批准在 2030 年及以后的所有安全强度级别使用。
最佳实践
- 不要将 SHA3-256 与以太坊的 keccak256 混淆
- 它们是对每个输入产生不同输出的不同算法。本工具计算 NIST FIPS 202 SHA3-256(填充字节 0x06)。以太坊的
keccak256使用原始 Keccak 填充(0x01)。如果你在计算以太坊地址哈希、EVM 存储槽或 Solidity keccak256() 结果,你需要专门的 keccak256 工具——本工具对这些用途会给出错误答案。 - 将 SHA-3 作为 SHA-256 的对冲手段,而非替代品
- SHA-3 和 SHA-2 使用结构上不同的设计(海绵与 Merkle-Damgård)。双哈希清单(SHA-256 + SHA3-256)提供纵深防御:如果某种算法的构造被发现密码分析漏洞,另一种仍然安全。对于长期归档数据和政府记录,NIST 建议考虑这种双算法方法。对于日常使用,单独使用 SHA-256 完全足够。
- 新的带密钥 MAC 设计优先选择 KMAC 而非 HMAC-SHA3-256
- NIST SP 800-185 定义了 KMAC128 和 KMAC256——基于 SHA-3 的专用带密钥 MAC。由于海绵构造原生具有长度扩展免疫性,KMAC 不需要 HMAC 为保证安全所需的双重哈希包装。对于在 MAC 算法选择上有灵活性的新协议,KMAC128(128 位安全性)或 KMAC256(256 位安全性)比 HMAC-SHA3-256 更简洁且稍微高效。
- 在代码中验证 SHA-3 哈希值时使用恒定时间比较
- 在代码中比较两个 SHA3-256 哈希值时,请始终使用恒定时间等值函数:Node.js 的
crypto.timingSafeEqual()、Python 的hmac.compare_digest()、Go 的subtle.ConstantTimeCompare()。简单的字符串等值比较(=== 或 ==)会泄漏时序信息,允许攻击者逐字节重建预期哈希值。这同样适用于 SHA-3 和所有其他哈希函数。本工具的「对比」选项卡已使用恒定时间比较。
SHA-3 常见问题
SHA-3 与 Keccak 相同吗?
0x01 后缀字节;NIST SHA-3(FIPS 202,2015 年)追加 0x06。这一单字节差异意味着 SHA3-256 和 Keccak-256 对每个输入都产生不同的 64 字符输出。算法在结构上其他方面完全相同——相同的 Keccak-f[1600] 置换,相同的海绵构造。当有人在以太坊/区块链语境中提及「Keccak」时,他们几乎总是指原始预 FIPS 填充变体,而非 NIST SHA-3。 为什么以太坊使用 keccak256 而非 SHA-3?
keccak256 使用原始 Keccak 填充(0x01),而本工具的 SHA3-256 使用 NIST FIPS 202 填充(0x06)。相同的结构算法,不同的输出。切勿使用本工具复现以太坊地址派生或 EVM keccak256——你会得到错误结果。 什么是海绵构造?
应该用 SHA-3 替代 SHA-2 吗?
SHA-3 比 SHA-256 快吗?
本工具的 SHA-3 哈希有多长?
SHA-3 具有量子抗性吗?
使用本工具时数据会被发送到服务器吗?
js-sha3 脚本从 CDN 获取一次,~10 KB),所有哈希计算完全在你的浏览器中以 JavaScript 运行。在哈希文本时打开开发者工具 → 网络选项卡——你会看到零携带你输入数据的外发请求。与本站的 SHA-2 工具(使用浏览器内置 Web Crypto API)不同,SHA-3 尚未进入 Web Crypto 规范,因此需要 JavaScript 库。库下载是唯一的网络请求;你的文本不会离开页面。另见:SHA-256 生成器和 MD5 生成器完全不使用外部库。 什么是 NIST SHA-3 竞赛?
SHA-3 是否对长度扩展攻击存在漏洞?
相关工具
查看所有工具 →JWT 解码器 · 在线解码工具
安全工具
免费 JWT 解码器,在线即时解码 JWT 令牌。查看头部、载荷、签名以及过期时间、算法和声明详情。100% 浏览器本地运行——令牌绝不离开你的设备。无需注册、无跟踪。
在线 MD5 哈希生成器与文件校验工具
安全工具
在线生成 MD5、SHA-256、SHA-1、SHA-512 哈希值 — 完全免费,浏览器本地运算,无需注册。支持文本和文件哈希、校验和验证、哈希值对比,一键复制,数据绝不离开你的设备。
随机密码生成器 — 自定义长度、强度与安全性
安全工具
免费在线随机密码生成器,一键生成高强度安全密码。支持自定义长度、字符类型,批量生成多个密码。所有密码仅在浏览器本地生成,不上传不存储。
SHA-1 哈希生成器(160 位遗留算法)
安全工具
在浏览器中生成 SHA-1 哈希值 — 40 字符十六进制输出,无需上传。适用于 Git 指纹查询、旧证书核验和迁移审计的遗留工具。数据绝不离开你的设备。
SHA-256 哈希生成器与校验和工具
安全工具
免费在线生成 SHA-256 哈希值。在浏览器中对文本或文件进行哈希、验证校验和,复制 64 字符十六进制输出。无需注册,数据不离开页面。
SHA-384 哈希生成器(TLS Suite B 哈希)
安全工具
在线生成 SHA-384 哈希值——96 字符十六进制输出,免疫长度扩展攻击,符合 NSA Suite B 标准。与 AES-256-GCM 配对用于 TLS。所有哈希通过 Web Crypto API 在浏览器中运行。