SHA-3 与 Keccak 哈希生成器

在你的浏览器中,从文本或十六进制字节计算 SHA3-224/256/384/512、Keccak-256/512 和 SHAKE128/256 摘要。

SHA-3 与 Keccak 哈希生成器完全在你的浏览器中运行。你哈希的文本和十六进制字节都在你的设备上处理,绝不会上传到 ArrayKit。

打开 SHA-256 与 SHA-1 哈希工具

关于 SHA-3 与 Keccak 哈希生成器

SHA-3 与 Keccak 哈希生成器会计算完整的 FIPS 202 家族——SHA3-224、SHA3-256、SHA3-384 和 SHA3-512——外加原始的 Keccak-256 和 Keccak-512,以及 SHAKE128/SHAKE256 可扩展输出函数。输入 UTF-8 文本,或切换到十六进制模式对原始字节进行哈希,小写摘要会在你输入时实时更新。它专为解决围绕这些算法的日常困惑而打造:SHA3-256 和 Keccak-256 看起来完全相同,但相差一个填充字节,而 Ethereum 在标准最终定稿之前就选定了 Keccak-256。用它来推导 Ethereum 函数选择器、验证 Solidity 的 keccak256 结果、核对 SHA-3 校验和,或选择 SHAKE 的输出长度。每个摘要都在你的浏览器中计算,因此你哈希的值都留在你的设备上。

功能特性

如何使用 SHA-3 与 Keccak 哈希生成器

  1. 选择一种算法——SHA3-256、Keccak-256、SHAKE256 等
  2. 选择 UTF-8 以哈希文本,或选择 Hex 以哈希原始字节
  3. 输入或粘贴你的内容;摘要会即时出现
  4. 对于 SHAKE,以位设置输出长度,然后复制十六进制摘要

示例

输入

algorithm: Keccak-256
input: "" (empty string)

输出

c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470

Ethereum 工具链在各处都依赖的空字符串 Keccak-256 哈希。

常见错误与故障排除

常见问题

SHA-3 和 Keccak-256 有什么区别?
它们运行相同的 Keccak 海绵结构,但在填充前附加了不同的域分隔字节(SHA-3 为 0x06,Keccak 为 0x01)。仅这一处差异就让它们的摘要完全不同,因此用 SHA3-256 哈希的值绝不会等于用 Keccak-256 哈希的同一个值。
为什么 Ethereum 使用 Keccak-256 而不是 SHA3-256?
Ethereum 在 NIST 用略有不同的填充最终确定 SHA-3 之前,就从最初的 Keccak 提案中采用了 Keccak-256。为了保持兼容,Ethereum 和 Solidity 的 keccak256 保留了原始变体,这也是地址和函数选择器都建立在 Keccak-256 之上的原因。
什么是 SHAKE128 和 SHAKE256?
它们是可扩展输出函数(XOF):你可以选择想要多少位摘要,而非固定大小。其中的 128 和 256 指的是它们的安全强度,而非输出长度,因此你可以从任一个请求 128、256、512 或更多位。
我该如何对原始字节进行哈希,以匹配对 ABI 编码数据的 keccak256 调用?
将输入切换到 Hex,并以十六进制粘贴这些字节——可选的 0x 前缀和空格都没问题。工具会哈希这些精确的字节,而非它们的 UTF-8 文本,这正是对编码数据执行 Solidity keccak256 所期望的。
SHA-3 只是 SHA-256 的一个更快或更安全的版本吗?
不是。SHA-3 是一种完全不同的设计——采用 Keccak 海绵结构,而非 SHA-256 背后的 Merkle–Damgård 构造——被选为一种标准化的备选方案。在相同的摘要大小下,它们提供相当的抗碰撞能力,但其输出完全不同,因此 SHA-3 并不是可以直接替换的方案。
对于 SHAKE,我该选择什么输出长度?
以你所实现的规范所要求的为准。常见的默认值是 SHAKE128 为 256 位、SHAKE256 为 512 位,但任何 8 位的正整数倍都可以——本工具会填入这些默认值,并允许你覆盖它们。

相关工具

全部 ArrayKit 工具