DevToolPal
繁

HMAC 產生器

用金鑰計算訊息的 HMAC-MD5、HMAC-SHA1、HMAC-SHA256、HMAC-SHA384 與 HMAC-SHA512,輸出十六進位或 Base64。

本機處理,不會上傳

選項

金鑰格式
輸出格式

訊息

0 字元 · 0 B

HMAC

結果會顯示在這裡

功能說明

HMAC(基於雜湊的訊息鑑別碼,RFC 2104)把金鑰和雜湊函式結合起來為訊息簽章。知道同一把金鑰的接收方重新計算 HMAC,再與隨訊息送來的值比對。只要訊息被改過,或傳送方不知道金鑰,兩個值就對不上。

HMAC 用途很廣:Webhook 簽章(GitHub、Stripe、Slack)、API 請求簽章、HS256 演算法的 JWT、Cookie 簽章和一次性密碼。本工具同時計算 HMAC-MD5、HMAC-SHA1、HMAC-SHA256、HMAC-SHA384 與 HMAC-SHA512,方便和你的系統所用演算法對照。

使用方法

  1. 輸入金鑰。如果金鑰是十六進位或 Base64 位元組而不是一般文字,請選擇對應的金鑰格式。
  2. 貼上訊息,或點選範例。
  3. 所有 HMAC 隨輸入即時更新。選擇十六進位或 Base64 輸出,複製需要的值。

訊息以 UTF-8 編碼,與輸入完全一致,包括空白和換行。

範例

金鑰為 key、訊息為 The quick brown fox jumps over the lazy dog 時,HMAC-SHA256 是 f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8。可以在命令列核對:

echo -n "The quick brown fox jumps over the lazy dog" | openssl dgst -sha256 -hmac "key"

注意 -n:少了它,echo 會加上換行,HMAC 就不同了。

驗證 Webhook

驗證 Webhook 時,取 JSON 解析前的原始請求內容,依服務商文件組出待簽章字串(常見的是 timestamp.body),用簽章金鑰計算 HMAC,再與簽章標頭比對。在自己的程式中,請用常數時間比較函式比對簽章,以防計時攻擊。

常見問題

› 雜湊和 HMAC 有什麼差別?

SHA-256 這類一般雜湊任何人都能算出來。HMAC 在雜湊中混入了金鑰,只有知道金鑰的人才能產生或驗證這個值,所以它是訊息鑑別碼,而不只是檢查碼。

› 應該用哪種 HMAC 演算法?

一般用 HMAC-SHA256,多數 API 和 Webhook 都要求它。HMAC-SHA512 也可以。HMAC-MD5 和 HMAC-SHA1 作為 MAC 目前仍算安全,但只在舊系統要求時使用。

› 為什麼我算出的 HMAC 和伺服器的不一樣?

檢查訊息的確切位元組(結尾換行、JSON 空白不同都會讓結果完全不同)、金鑰格式(文字還是十六進位/Base64)以及輸出編碼。Webhook 服務商通常對「時間戳記 + 原始請求內容」組成的字串簽章。

› 我的金鑰會被儲存或傳送出去嗎?

不會。HMAC 在瀏覽器中計算,金鑰只存在目前頁面的記憶體裡,不會儲存、不會寫進網址列,也不會包含在分享連結中。