HMAC 計算・署名検証ツール
HMAC-SHA256・SHA-512・SHA-1・MD5 をブラウザで計算。鍵はテキスト・16 進数・Base64 に対応。LINE や Chatwork の Webhook 署名を貼り付けて照合し、一致しない原因も表示します。
- ブラウザ内で処理
- データはブラウザ外に出ません
- 無料 · 登録不要
WeChat でスキャンしてシェア
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。
計算は RFC 2104 の定義どおりです。鍵がブロック長(SHA-256 は 64 バイト、SHA-512 は 128 バイト)を超えると先にハッシュし、出力長より短い鍵には注意を表示します(RFC 2104 §3 は推奨していません)。
LINE の公式例で確かめる
LINE Developers の「Webhookの署名を検証する」には、検証ボタンで届くボディ、チャネルシークレット 8c570fa6dd201bb328f1c1eac23a96d8、署名が載っています。形式を「LINE Messaging API」にして「例」を押すと、次の値になります。
x-line-signature: GhRKmvmHys4Pi8DxkF4+EayaH0OqtJtaZxgTD9fMDLs=
ドキュメントの openssl dgst -sha256 -hmac … -binary | openssl base64 と同じ結果です。ボディを見やすく整形してから貼ると一致せず、本ツールは「1 行に詰めた JSON と一致します」のように、どう変わったかを示します。
Chatwork はトークンをデコードしてから使う
Chatwork の Webhook ドキュメントは、「トークンをBase64デコードしたバイト列を秘密鍵とします」と定めています。説明用に chatwork-webhook-token-sample-01 を Base64 にしたトークン Y2hhdHdvcmstd2ViaG9vay10b2tlbi1zYW1wbGUtMDE= と、短いボディで計算した例です。
co2OlvkgxgqT06s8DH9nYIM3DZQ+rUqAmNIBqGH6RLA=
トークンを文字列のまま鍵にすると Sn51C3lS… になり、ヘッダーとは一致しません。この値を貼り付けると、本ツールは「鍵をテキスト(UTF-8)として読むと一致します」と表示します。署名はリクエストパラメーター chatwork_webhook_signature にも入りますが、そちらは URL エンコードされているので、%2B などはそのまま貼り付けて構いません(自動でデコードします)。
形式ごとの署名対象
| 形式 | 署名対象 | 鍵 | 送られ方 |
|---|---|---|---|
| GitHub | ボディ | Webhook secret(テキスト) | sha256= + 16 進数 |
| Stripe | t +「.」+ ボディ | whsec_ を含む全体 | t=…,v1=… |
| Slack | v0: + タイムスタンプ +「:」+ ボディ | Signing Secret | v0= + 16 進数 |
| LINE / Shopify | ボディ | チャネルシークレット / クライアントシークレット | Base64 |
| Chatwork | ボディ | トークンを Base64 デコード | Base64 |
Stripe と Slack は 5 分より古いタイムスタンプを拒否するよう求めているので、範囲外なら本ツールも注意を出します。Stripe のヘッダーを貼り付けると、タイムスタンプ欄が空のときは t= の値を自動で入れます。
Shift_JIS の文字列に署名するとき
テキストは UTF-8 でバイト列にします。「署名」は UTF-8 では 6 バイト、Shift_JIS では 8f9096bc の 4 バイトです。鍵 key での結果は次のとおりです。
UTF-8:8401f7fe91c2a264a4ee5d8af3d768cd8a6edcaa962441b61043d65311099296
Shift_JIS(メッセージの形式を 16 進数にして 8f9096bc):6c28ecde248e521ec23726c44942d60c1899c9db1a5c7dacd25c31838b24dd18
古い連携先の仕様が Shift_JIS で署名している場合は、16 進数に変換してから入力してください。
他の HMAC ツールとの違い
2026-10-01 に GitHub ドキュメントの例で確認しました。CoderTools は SHA3 や RIPEMD-160 も選べ、ブラウザ内で計算します。ただし鍵を 16 進数にして 0b0g を入れると「無効な16進数形式です」と出るだけで何文字目かは示さず、直前の結果も画面に残ります。メッセージが空だと計算しないため、空メッセージに署名する Feishu 方式は扱えません。本ツールは誤りの位置を示し、エラー時は結果を消します。署名ヘッダーを sha256=… や t=…,v1=… の形のまま照合できます。
制限
- アルゴリズムは MD5・SHA-1・SHA-224・SHA-256・SHA-384・SHA-512。SHA-3・RIPEMD-160 は Web Crypto API にないため扱いません。
- テキスト欄の改行はすべて LF になります。CRLF で署名された場合は改行コードを CRLF にし、それ以外の特殊なバイトは 16 進数か Base64 で入力してください。
- ブラウザでの照合はデバッグ用です。サーバーでは受信したボディのバイト列を使い、定数時間で比較してください。JWT の HS256 も HMAC-SHA256 なので、JWT ジェネレーターで扱えます。
鍵を使わないハッシュ値はハッシュジェネレーター、HMAC-SHA1 を使うワンタイムパスワードは2段階認証コード生成ツールを使ってください。
FAQ
秘密鍵が送信・保存されることはありますか?
ありません。SHA-1・SHA-256・SHA-384・SHA-512 はブラウザ標準の Web Crypto API、MD5 と SHA-224 はページ内のコードで計算します。通信は行わず、鍵やメッセージを localStorage・Cookie・URL にも書きません。このページはアクセス解析や広告のスクリプトも読み込みません。再読み込みすると入力は消えます。
LINE の署名検証が通りません。
受信したボディ文字列をそのまま使っているか確認してください。LINE の公式ドキュメントも、JSON をパースしてから文字列に戻す、整形する、エスケープを解釈する、UTF-8 以外で扱う、といった処理で検証が失敗すると説明しています。署名ヘッダーを「照合する署名」に貼り付けると、本ツールは改行の有無や JSON の整形などを順に試し、一致した原因を表示します。
Chatwork の Webhook 署名はどう計算しますか?
Webhook 編集画面のトークンを Base64 デコードしたバイト列を鍵にし、受信したボディの HMAC-SHA256 を Base64 にします。トークンを文字列のまま鍵にすると一致しません。形式で「Chatwork Webhook」を選ぶとデコードまで自動で行います。
どのアルゴリズムを選べばよいですか?
相手の仕様に合わせます。新しく設計するなら HMAC-SHA256 が一般的で、LINE・Chatwork・GitHub・Stripe・Slack などが使っています。HMAC-SHA1 は Twilio や GitHub の旧ヘッダー X-Hub-Signature、HMAC-MD5 は古いシステムと RFC 2104 のテストベクター用です。
サーバーで署名を == で比較してもよいですか?
避けてください。Node.js の crypto.timingSafeEqual(長さが違うと例外になるので先に長さを比較)、Python の hmac.compare_digest、Go の hmac.Equal、Java の MessageDigest.isEqual のような定数時間の比較を使います。本ツールの照合はブラウザ内だけで行うので、時間差は問題になりません。