Keccak-256ハッシュ計算機

Ethereumで使われるKeccak-256でテキストや生バイト列をハッシュし、SHA3-256およびSHA-256と比較できます。結果は入力と同時に更新され、先頭4バイトがSolidityの関数セレクタです。

ブラウザ内のJavaScriptで計算します。アドレスがアップロードや保存されることはありません。

Keccak-256 とは

Keccak-256 は Ethereum があらゆる場所で使う 256 ビットのスポンジ型ハッシュ関数です。アドレスは公開鍵の Keccak-256 の末尾 20 バイト、関数セレクタは正規シグネチャの Keccak-256 の先頭 4 バイトで、イベントトピック、EIP-55 チェックサム、ストレージスロットもすべてここから導かれます。これは NIST が最終化した SHA3-256 ではなく元の Keccak 提案版で、両者の違いはパディングバイトだけですが、同じ入力に対して異なるダイジェストを返します。

主な用途

テストベクタ

入力Keccak-256
(空文字列)0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
abc0x4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45
Transfer(address,address,uint256)0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

実装に頼る前に、これらのいずれかを貼り付けて確認してください。

Keccak-256 vs. SHA3-256 vs. SHA-256

関数ファミリーパディング / 構造利用先
Keccak-256Keccak スポンジ、レート 1088 ビットpad10*1、ドメインバイト 0x01Ethereum、Tron(TVM)、すべての EVM チェーン
SHA3-256Keccak スポンジ、レート 1088 ビットpad10*1、ドメインバイト 0x06(FIPS 202)NIST 系アプリケーション、一部の非 EVM チェーン
SHA-256Merkle–Damgård(SHA-2)長さパディング、512 ビットブロックBitcoin、Tron の txID、TLS、Base58Check

具体例: FIPS 202 準拠のライブラリで abc の SHA3-256 を求めると 0x3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532 が返りますが、同じ 3 バイトの Keccak-256 は上の表の 0x4e03657a… の値です。コントラクトやエクスプローラーの値がお使いのライブラリと一致しない場合、まずパディングバイトを疑ってください。

よくある質問

Keccak-256 と SHA3-256 は同じですか?

いいえ。Ethereum は NIST が SHA-3 を最終化する前に Keccak を採用し、最終規格ではパディングバイトが変更されました(Keccak は 0x01、SHA3 は 0x06)。同じ入力でも両者の出力は異なるため、web3 ライブラリはこの関数を sha3 ではなく keccak256 と呼んでいます。このページは両方を表示するので、違いを確認できます。

Ethereum は Keccak-256 を何に使っていますか?

公開鍵からのアドレス導出(ハッシュの末尾 20 バイト)、関数セレクタとイベントトピック(シグネチャのハッシュ)、EIP-55 チェックサム、マッピングのストレージスロット計算、Merkle-Patricia トライのノード、そしてブロックハッシュとトランザクションハッシュです。

テキストと hex のどちらをハッシュすべきですか?

シグネチャや通常の文字列には UTF-8 テキストを選びます。非圧縮公開鍵や ABI エンコード済みデータなど生のバイト列がある場合は hex を選びます。0x プレフィックスは省略可能です。テキスト "0xabcd" をハッシュした結果と、バイト列 0xabcd をハッシュした結果は異なります。

ハッシュはサーバー側で計算されますか?

いいえ。Keccak、SHA3、SHA-256 はこのページ内の JavaScript で実装され、お使いのブラウザで実行されます。読み込み後、このページはネットワークリクエストを一切行いません。

空文字列の Keccak-256 は何ですか?

0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 です。Ethereum では頻繁に登場します。コードを持たないすべてのアカウントのコードハッシュがこの値であるため、エクスプローラーは通常のウォレットに対してこれを表示します。

Bitcoin の値をここで検証できますか?

SHA-256 が含まれているので、データを 1 回ハッシュすることはできます。Bitcoin のダブル SHA-256 と RIPEMD-160 は個別の出力としては提供していませんが、Bitcoin アドレスバリデーターがアドレス検証時に内部で実行しています。