Ethereum/Core API/web3_sha3

web3_sha3

web3_sha3方法计算给定数据的Keccak-256哈希。尽管名称如此,此方法返回的是Keccak-256哈希,而非标准化的SHA3-256哈希。Keccak-256是以太坊中广泛用于各种加密操作的哈希算法。

使用场景

  • 生成任意数据的确定性哈希
  • 为智能合约调用创建函数签名
  • 计算用于日志过滤的事件主题
  • 验证链上和链下数据的完整性
  • 在应用程序中实现加密原语
  • 计算用于日志分析的事件签名
  • 测试智能合约开发的哈希生成
  • 为签名操作生成消息摘要
  • 从输入数据创建唯一标识符
  • 计算合约的确定性地址

方法详情

此方法接受一个参数,即要哈希的数据,并返回该数据的Keccak-256哈希。

参数:

要哈希的十六进制格式数据

返回值:

提供数据的Keccak-256哈希,以十六进制字符串表示

响应示例

{
	"jsonrpc": "2.0",
	"id": 1,
	"result": "0x21276a0c70e3fde6a5a3627d2d2748bc945b7cfc86dbd4cf60f425ad5058d9b0"
}

输入数据格式

输入数据必须以带有0x前缀的十六进制字符串提供。输入可以是任意数据,包括以太坊地址、交易数据或原始字节。

例如,要哈希一个以太坊地址:

  1. 以十六进制格式获取地址:0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed
  2. 将此十六进制字符串传递给方法

Keccak-256与SHA3-256

需要注意的是,此方法返回的是Keccak-256哈希,而非标准化的SHA3-256哈希:

  • Keccak-256:提交给NIST SHA3竞赛的原始算法
  • SHA3-256:包含对Keccak的一些修改的最终NIST标准

以太坊在NIST标准化完成前就采用了Keccak-256,因此继续使用原始的Keccak算法而非切换到标准化的SHA3。

在以太坊中的常见应用

Keccak-256哈希函数在以太坊中被广泛使用:

  1. 函数签名:函数签名transfer(address,uint256)的Keccak-256哈希的前4个字节用于在交易数据中标识函数调用
  2. 事件主题:事件签名的Keccak-256哈希用作事件日志中的主题
  3. 合约地址:合约地址部分使用Keccak-256哈希函数生成
  4. 交易哈希:交易的唯一标识符使用Keccak-256生成
  5. 区块哈希:区块通过其Keccak-256哈希进行标识
  6. 默克尔树:用于高效存储和验证数据

示例转换

输入类型输入(十六进制)Keccak-256哈希
以太坊地址0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed0x21276a0c70e3fde6a5a3627d2d2748bc945b7cfc86dbd4cf60f425ad5058d9b0
函数签名0x095ea7b30xf2c0a300acb0c93fb0fdeceeac9b2c9b7f6c1413629bc2a8483bc3ca775e17ce
空字符串0x0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470

重要说明

  • 此方法处理原始字节,而非字符串表示
  • 输入必须正确地十六进制编码并带有0x前缀
  • 返回的哈希始终为32字节(64个十六进制字符)加上0x前缀
  • 尽管技术上有差异,许多编程库仍将Keccak-256实现为"SHA3"
  • 该方法纯粹是计算性的,不会影响区块链状态
  • 相同的输入将始终产生相同的输出
  • 此方法受所有以太坊客户端实现支持
  • 零长度输入是有效的,会产生特定的哈希值

另请参阅

帮助我们变得更好!
分享此页面并帮助我们为您创建更好的产品。