HMAC 計算機

秘密鍵でメッセージの HMAC-SHA256 / HMAC-SHA512 を入力中にリアルタイム計算。16 進数出力、UTF-8 入力、空メッセージにも対応。

入力内容とファイルはブラウザ内に留まります

キーとメッセージ

署名するメッセージ(Webhook の本文など)を貼り付けるか、例を読み込んでください。

秘密鍵を入力すると、入力に合わせて HMAC が計算されます。

このページの内容

HMAC 計算機は、入力に合わせて SHA-256 または SHA-512 による鍵付きメッセージ認証コード(RFC 2104)を計算します。Webhook 署名の確認や API リクエスト署名の再現に使え、鍵とメッセージはブラウザから出ません。

詳細な機能

シークレットキー と メッセージ を入力します。どちらも入力どおりの UTF-8 テキストとして扱われます。キー入力やアルゴリズム変更のたびに再計算され、結果は小文字の 16 進数で表示されます(HMAC-SHA256 は 64 文字、HMAC-SHA512 は 128 文字)。計算はページ内の Rust/WebAssembly モジュールが行います。

空のメッセージも有効な入力です。鍵 key で空メッセージの HMAC-SHA256 は 5d5d139563c95b5967b9bd9a8c9b233a9dedb45072794cd232dc1b74832607d0 となり、OpenSSL など他のライブラリと一致します。鍵が空なら出力も空のままです。ハッシュのブロック長(SHA-256 は 64 バイト、SHA-512 は 128 バイト)より長い鍵は、規格どおり先にハッシュされます。

鍵欄はテキストのみ受け付けます。サービスが 16 進数や Base64 で渡すシークレットは、そのサービスが実際に鍵として使う形で入力してください。結果は RFC 4231 のテストベクトルで確認済みです。何も保存されず、再読み込みすると欄は空になります。

実用例

定番のテストベクトル: 鍵 key、メッセージ The quick brown fox jumps over the lazy dog、SHA-256 → f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8。

RFC 4231 テストケース 2: 鍵 Jefe、メッセージ what do ya want for nothing?、SHA-256 → 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843。

空のメッセージ: 鍵 key と空メッセージで 5d5d139563c95b5967b9bd9a8c9b233a9dedb45072794cd232dc1b74832607d0。printf '' | openssl dgst -sha256 -hmac key と同じです。

Webhook の確認: 元のリクエストボディをメッセージに、Webhook のシークレットを鍵に貼り付けます。プロバイダーが sha256=<hex> を送ってくる場合は、16 進数部分だけを結果と比較します。

このツールの使い方

  1. 鍵を入力する

    共有シークレットを シークレットキー に入力または貼り付けます。

  2. メッセージを入力する

    署名されたバイト列そのままを メッセージ に貼り付けます。空のままにすると空文字列の HMAC を計算します。

  3. アルゴリズムを選ぶ

    アルゴリズム で SHA-256 か SHA-512 を選ぶと、HMAC 結果 がすぐに更新されます(HMAC を計算 を押しても構いません)。

  4. コピーまたはクリア

    コピー で 16 進数値を取得し、クリア で両方の欄を空にします。

ヒントとベストプラクティス

  • サーバーが署名したバイト列そのものを使ってください。JSON の整形、キー順の違い、末尾の改行の追加で HMAC は変わります。
  • 自分のコードでは HMAC を定数時間で比較してください。ここでの目視比較はデバッグ用です。
  • 末尾に空白や改行が付いたシークレットは別の鍵です。値が一致しないときは鍵欄を確認しましょう。
  • 通常の用途で HMAC-SHA512 が「2 倍安全」になるわけではありません。相手側が期待するアルゴリズムを使ってください。
  • 期待値が Base64 なら、16 進数出力と同じバイト列を表しています。比較前に変換してください。