HMAC生成
HMAC Generator
ハッシュの種類と鍵の符号化を決めてメッセージのHMACを計算し、Webhookの署名確認に使えます。
テキストやファイルに対してHMAC——鍵を使ったダイジェスト——を計算します。鍵はテキスト、16進数、Base64のいずれかとして読めます。ハッシュのツールのHMAC側を有効にした画面と同じものです。HMACは鍵の付いたハッシュにすぎず、分けてしまえば、すべての操作部を共有するページが2つできてしまうからです。
入力
チェックサムを取るファイルを置く
このタブの中で読みます。アップロードはしません。
テキストはUTF-8のバイト列としてハッシュします。ほかの道具が文字列のハッシュと言うときの、その方式です。
ハッシュ値
公開されているチェックサムを貼り付けると、一致した行が光ります。
| アルゴリズム | ハッシュ値 | コピー |
|---|---|---|
| MD5衝突を作るのが安上がりです。チェックサムには構いませんが、署名やパスワードには使わないでください。 | ||
| SHA-1衝突が実際に示されています。昔からのチェックサムならまだしも、新しく使うものではありません。 | ||
| SHA-256 | ||
| SHA-384 | ||
| SHA-512 | ||
| CRC-32ハッシュではなく誤り検出符号です。二つのファイルが偶然に同じ値を持つこともあり、故意ならなおさらです。 |
入力
0 byte
入力元
テキスト欄
使い方
HMACを有効にします
鍵の入力欄が現れ、表からCRC-32が外れます。ハッシュ関数ではなくチェックサムなので、HMACがありません。
鍵をどう読むかを指定します
HMACが食い違う場所は、たいていここです。`0a1b2c`と書かれた鍵は、16進数としては3バイト、テキストとしては6バイトで、この2つはまったく違う値を出します。
送られてきた署名と突き合わせます
比較の欄に貼り付ければ、一致した行に印が付きます。Stripe、GitHub、Slackのwebhookの署名は、どれも決まった文字列に対するHMAC-SHA256なので、鍵と同じくらい、メッセージを正確に合わせることが重要です。
よくある質問
自分のHMACがヘッダーのものと一致しないのはなぜですか
たいていは鍵ではなく、メッセージのほうです。webhookの署名は、決まった文字列——多くはタイムスタンプ、区切り、そして生の本文——に対して計算されます。JSONのパーサを通してから直列化し直した本文は、別の文字列です。受け取ったバイト列そのものに署名してください。
HMACは、鍵とメッセージをつなげてハッシュするのと同じことですか
違います。そこがHMACの存在理由です。`hash(鍵 + メッセージ)`は、MD5・SHA-1・SHA-256で長さ拡張攻撃に対して脆弱です。内側と外側のパディングを使うHMACの2パスの構成が、それを取り除きます。自分で組み立てないでください。
鍵はタブの外へ出ますか
出ません。このタブでWebCryptoの鍵を作るためだけに使います。送信もしませんし、保存もしませんし、URLにも入れません。ページを再読み込みすれば消えますが、秘密についてはそれが正しい動作です。
鍵はどれくらいの長さが必要ですか
少なくともダイジェストと同じ長さです。SHA-256なら32バイトです。HMACはどんな長さでも受け付けますが、ブロックサイズより長い鍵はまず先にハッシュして縮められますし、短い鍵はただ短い鍵です。安全性は、入れたエントロピーの分だけです。
ここから渡せます
文字列のハッシュ
Text Hash
文字列のMD5・SHA-1・SHA-256・SHA-384・SHA-512・CRC-32を計算し、大文字表記とBase64での出力も選べます。
TOTPコード生成
TOTP Code Generator
TOTPの秘密鍵から今の6桁コードを残り時間つきで出し、2段階認証の設定確認に使えます。
ランダムキー生成
Random Key Generator
暗号学的な乱数バイトを指定した長さで16進・Base64・Base64URLとして生成し、アプリのシークレットに使えるようにします。
JSONフォーマッター・検証
JSON Formatter & Validator
JSONを整形・圧縮して検証し、構文エラーがあれば行と列を正確に指し示します。
次の一手
このツールが出したものをそのまま受け取れる道具です。
文字列のハッシュ
Text Hash
文字列のMD5・SHA-1・SHA-256・SHA-384・SHA-512・CRC-32を計算し、大文字表記とBase64での出力も選べます。
JWTデコーダー
JWT Decoder
ヘッダーとペイロードを復号し、期限のクレームを現地時刻で見せ、渡した鍵で署名も検証します。
ランダムキー生成
Random Key Generator
暗号学的な乱数バイトを指定した長さで16進・Base64・Base64URLとして生成し、アプリのシークレットに使えるようにします。
Base64エンコード・デコード
Base64 Encoder & Decoder
テキストでもファイルでもBase64とBase64URLを符号化・復号し、UTF-8も正しく扱います。
curlをコードに変換
curl to Code
curlのコマンドをfetch・axios・Pythonのrequests・Go・PHP・PowerShellのコードに変換します。
JSON⇄CSV変換
JSON ⇄ CSV
入れ子のJSONをドット記法の列名で平らに開くか、表からオブジェクトを組み直します。