一文读懂 Keccak256

  • martin
  • 发布于 13小时前
  • 阅读 76

Keccak256 是一种加密哈希函数,是以太坊(Ethereum)系统里最常用的哈希算法。它与 SHA3-256、hash256 的区别是 ...

定义

Keccak256 是一种 加密哈希函数,是以太坊(Ethereum)系统里最常用的哈希算法。

  1. 它是一个 hash 算法,具备 hash 算法的特征
  2. Keccak256 = 输入任意数据 → 输出一个固定 32 字节(256 bit)的哈希值。 你给它任何内容(字符串、数字、二进制…),它会算出一个不可逆、几乎唯一的「指纹」。
  3. 固定长度、不可逆、极小概率碰撞、以太坊默认使用(以太坊没有使用 SHA-256(比特币用 SHA-256),而是使用 Keccak-256。)

在 Solidity 中常见用途

1. 计算函数选择器 (function selector)

bytes4(keccak256(bytes(_func)));

函数选择器 = keccak256("transfer(address,uint256)") 的前 4 字节。

2. 生成哈希、签名消息、链下验证

keccak256(abi.encodePacked(msg.sender, amount))

3. 用于 mapping 的 key,避免冲突

如 EIP-1967 里存储槽都用 keccak256 计算。

示例

keccak256("hello")

输出类似:

0x06d…(64个十六进制字符)

keccak256、SHA3-256、hash256 总结为一张表

名称 使用者 算法 是否等同
keccak256 以太坊、Solidity Keccak(旧版) ❌ 不等同 SHA3-256
SHA3-256 NIST 标准、OpenSSL Keccak(标准化版) ❌ 与 keccak256 有差异
hash256 比特币 SHA-256 两次 ❌ 与上述两者完全无关

为什么以太坊不用 SHA3-256?

历史原因。以太坊开发时(2014 年),SHA-3 标准还没最终确定。

他们使用了当时的 Keccak(旧版本)。后来 NIST 改了一点点 padding,导致:Keccak-256 != SHA3-256。再改就会影响链上数据,所以以太坊只能继续用旧版本。

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
martin
martin
xxx