跳到主要內容
Tools

HMAC 產生器

用金鑰計算訊息的 HMAC-SHA256、SHA-384、SHA-512、SHA-1 與 MD5,並可驗證 Webhook 或 API 簽章。

金鑰只在這個分頁的記憶體中使用,不會儲存或送出。

金鑰是空的:任何人都能算出同樣的 HMAC,無法驗證來源。

0 個字元 · 1 行

HMAC

輸出格式
HMAC-SHA-256
計算中…
HMAC-SHA-384
計算中…
HMAC-SHA-512
計算中…
HMAC-SHA-1舊系統用
計算中…
HMAC-MD5舊系統用
計算中…

HMAC-SHA1 與 HMAC-MD5 目前仍未被實際破解,但只建議用來對接舊系統;新系統請用 HMAC-SHA256 以上。

金鑰 0 B,訊息 0 B

伺服器驗證 HMAC 時應使用固定時間比對(例如 Node.js 的 crypto.timingSafeEqual),避免攻擊者從回應時間猜出簽章;在你自己的瀏覽器中比對沒有這個風險。

使用說明

  1. 輸入金鑰,並選擇金鑰是一般文字(UTF-8)、十六進位或 Base64。
  2. 輸入訊息(例如 Webhook 的原始內容),HMAC-SHA256、SHA-384、SHA-512、SHA-1 與 MD5 會同時即時算出來。
  3. 選擇輸出格式:十六進位、Base64 或 JWT 使用的 Base64url。
  4. 要驗證收到的簽章時,把它貼到「驗證 HMAC」,就會顯示是否相符以及是哪一種演算法。
  5. 按「範例」載入 RFC 4231 的測試資料(金鑰 Jefe),可以和規格書的結果對照。

常見問題

我的金鑰會被上傳或儲存嗎?

不會。HMAC 是用瀏覽器內建的 Web Crypto 在你的裝置上計算,金鑰與訊息不會送到任何伺服器,也不會存進瀏覽器;關閉分頁就會消失。只有金鑰格式與輸出格式等選項會記在瀏覽器中。

HMAC 和一般雜湊(SHA-256)有什麼不同?

雜湊任何人都能算;HMAC 需要知道金鑰才能算出正確的值。收到訊息的一方用同一把金鑰重新計算並比對,就能確認訊息沒有被竄改、而且來自持有金鑰的人。GitHub、Stripe、LINE 等 Webhook 都用這種方式簽章。

為什麼我的結果和伺服器算的不一樣?

最常見的原因:訊息多了或少了結尾換行、JSON 被重新排版(必須用收到的原始內容)、金鑰其實是十六進位或 Base64 卻當成文字輸入,或兩邊的輸出格式不同(十六進位與 Base64)。有些服務還會在訊息前加上時間戳記,請對照它的文件。

比對簽章時要注意什麼?

在伺服器上請使用固定時間的比對函式(例如 Node.js 的 crypto.timingSafeEqual、Python 的 hmac.compare_digest),不要用 ==,否則攻擊者可能從回應時間逐步猜出正確簽章。在你自己的瀏覽器中比對沒有這個風險。

金鑰要多長?HMAC-SHA1 和 HMAC-MD5 還安全嗎?

RFC 2104 建議金鑰至少和輸出一樣長,例如 HMAC-SHA256 用 32 位元組以上的隨機值。HMAC-SHA1 與 HMAC-MD5 目前還沒有實際可行的攻擊,但只建議用在必須對接的舊系統;新系統請用 HMAC-SHA256 以上。

鍵盤快捷鍵

/
搜尋工具(在工具頁會回到首頁的搜尋欄)
?
顯示這個說明
Esc
關閉對話框
Ctrl / ⌘Enter
執行工具的主要動作(支援的工具)

在輸入框中打字時,/ 與 ? 不會觸發快捷鍵。