piapia123
ja

HMAC 署名の計算

エンコード・暗号

処理はすべてブラウザ内で完結します。データは送信されません

入力
出力

秘密鍵とメッセージから HMAC 署名を計算します。SHA-1・SHA-256・SHA-512 に対応し、16進数または Base64 で出力します。鍵は UTF-8 のバイト列として演算に使われるので、空白・日本語・中国語・emoji を含む鍵でも Node・Java・Python と同じ結果になります —— 署名付き API を繋ぐときによく踏む落とし穴です。鍵は必須です:空の鍵は数学上は「計算できます」が、出てくる署名は望む結果と何の関係もなく、しかも見た目は完全に正常なので、ここで止めています。手がかりのない壁にサーバー側でぶつかるよりましだからです。なお、HMAC と「鍵を連結してからハッシュ」は別物で、後者には長さ拡張攻撃があります。

機能

  • 3つのアルゴリズム:HMAC-SHA1・HMAC-SHA256・HMAC-SHA512
  • 鍵とメッセージは別々に入力するので、長いメッセージに紛れ込ませて間違えることがありません
  • 鍵もメッセージも UTF-8 のバイト列として処理し、Node・Java・Python と結果が一致します
  • 出力は16進数または Base64
  • 空の鍵はその場でエラーにし、「見た目は正常」な署名を出しません
  • 鍵は端末内の演算にだけ使われ、どんな理由でも外へ送られません

使い方

  1. 「秘密鍵」欄に署名鍵を入力します
  2. メッセージを入力欄に貼り付けます
  3. アルゴリズムと出力のエンコードを選び、Ctrl/⌘ + Enter を押すか「実行」をクリックします
  4. 「コピー」で署名を取り出せます

よくある質問

HMAC と、単に「鍵 + メッセージ」をハッシュするのとでは何が違いますか?
HMAC はまず鍵を XOR でパディングし、内側と外側の2回ハッシュします。この構造のおかげで長さ拡張攻撃の影響を受けません。一方 hash(鍵 + メッセージ) が MD5・SHA-1・SHA-256 のような構造だと、攻撃者は鍵を知らないまま有効な署名をさらに計算し続けられます。API を繋ぐときに自分で文字列を連結しないでください。
なぜ鍵の入力が必須なのですか?
空の鍵で計算されるのは「空文字列を鍵にした」署名で、数学的には合法ですが、あなたには何の役にも立ちません。しかも正常な署名と見分けがつかないので、そのまま API に持っていっても、手がかりのない検証失敗が一言返ってくるだけです。ここで推測させるより、その場で止めるほうがましです。
計算した署名が相手と一致しないときは?
次の3つを順に確認してください:鍵が UTF-8 のバイト列として処理されているか(本ツールはそうです)、メッセージに余分な空白や改行が入っていないか、出力のエンコードが一致しているか(hex と Base64 は同じバイト列の2通りの表記です)。前の2つが食い違うと、結果はまったく別物になります。
「現在の環境では Web Crypto が利用できません」と出るのはどういうことですか?
HMAC はブラウザ標準の crypto.subtle を使いますが、これは安全なコンテキストにしか存在しません:https:// または localhost / 127.0.0.1 です。http:// や社内 IP でこのページを開くと使えません —— これはブラウザの安全ポリシーです。https のアドレスに切り替えるか、別のツールで計算してください。
秘密鍵は送信されますか?
いいえ。鍵とメッセージはブラウザのメモリ内で演算に使われるだけで、ページはリクエストを一切送らず、オフラインでも使えます。そのため署名の検証もここで行えます —— ただし本番の鍵を貼り付けるのは、信頼できる端末だけにしてください。

関連ツール

ハッシュ計算

エンコード・暗号

MD5・SHA-1・SHA-256・SHA-512 のダイジェストを計算します。日本語や中国語も UTF-8 バイトで計算し openssl や sha256sum と一致。ブラウザ内で処理します。

パスワード生成

生成

長さと文字種を指定して強力なランダムパスワードを生成。エントロピーを即時表示し、強さを数値で比較できます。パスワードは端末内のみ、送信も記録もありません。

Base64 変換

エンコード・暗号

テキストを Base64 に変換し、Base64 からテキストへ戻します。日本語や中国語、emoji も UTF-8 として正しく処理。すべてブラウザ内で完結し、内容は送信しません。

URL エンコード

エンコード・暗号

日本語や中国語、空白・記号を %XX にエスケープし、復元します。URL 全体とパラメータ値では方式が異なり、間違えるとリンクが開けません。ブラウザ内で処理します。

HTML 実体参照

エンコード・暗号

< > & と引用符を HTML 実体参照に変換し、文字へ戻します。デコードは1回だけで、&amp;lt; は山括弧ではなく &lt; になります。すべてブラウザ内で処理します。

JWT デコード

エンコード・暗号

JWT を header・payload・signature に分け、iat や exp を読める日時に変換します。署名は検証せず、その旨を出力に明記します。すべてブラウザ内で処理します。