HMAC 產生與驗證工具
使用秘密金鑰產生並驗證 HMAC-SHA256 等 HMAC 簽章。
選填。GitHub 的 X-Hub-Signature-256 標頭值(sha256=…)可以直接貼上。
HMAC 是由訊息與雙方共用的秘密金鑰產生的簽章:擁有金鑰的人都能重新計算,而訊息或金鑰只要有任何改變,就會得到不同的值。Webhook(GitHub、Stripe、Slack)、經過簽署的 API 請求與 JWT HS256 權杖都使用它。HMAC 會隨輸入即時更新,你也可以貼上簽章進行檢查。計算由瀏覽器內建的 Web Crypto 完成,所以訊息與金鑰都不會離開你的裝置;免費,也不需要註冊。
如何產生與驗證 HMAC
- 原樣貼上當初簽署的訊息——如果是 Webhook,就是原始的請求內容(body)。
- 輸入秘密金鑰,或點擊「產生」建立隨機金鑰;如果拿到的是十六進位位元組形式的金鑰,請選擇「十六進位」。
- 選擇演算法(除非另有指定,否則用 SHA-256),並以十六進位或 Base64 複製結果。
- 要檢查簽章,請貼到「檢查簽章」下方——GitHub 的 sha256=… 標頭值可以直接貼上。
功能
- HMAC-SHA1、HMAC-SHA256、HMAC-SHA384 與 HMAC-SHA512
- 秘密金鑰可用文字(UTF-8)或十六進位,或以「產生」建立隨機的 32 位元組金鑰
- 結果以十六進位或 Base64 顯示,隨輸入即時更新
- 檢查收到的十六進位或 Base64(包括 URL 安全格式)簽章,可含或不含 GitHub 的 sha256= 或 Slack 的 v0= 前綴
- 簽章長度屬於其他演算法時會提示你,並提供切換按鈕
- 以瀏覽器內建的 Web Crypto 計算
隱私安全嗎?
是的。HMAC 由瀏覽器內建的 Web Crypto 計算;訊息與秘密金鑰都只留在這個頁面上,絕不會上傳或儲存。
常見問題
如何驗證 GitHub Webhook 簽章?
把原始請求內容貼為訊息,把 Webhook 密鑰當作文字金鑰輸入,再把 X-Hub-Signature-256 標頭值貼到「檢查簽章」下方。GitHub 送出的是 sha256= 加上請求內容的十六進位 HMAC-SHA256,前綴可以原樣讀取。
如何檢查 JWT HS256 簽章?
把權杖的標頭與酬載——也就是第二個點之前的所有內容——貼為訊息,把密鑰當作金鑰,選擇 SHA-256,再把權杖的第三部分貼到「檢查簽章」下方。它的 URL 安全 Base64 可以直接讀取。
為什麼簽章對不上?
訊息必須與當初簽署的內容逐位元組相同:重新排版過的 JSON、結尾少了或多了換行,或 Windows(CRLF)換行符號,都會改變 HMAC。在這裡輸入的文字使用 LF 換行。也請確認演算法,以及金鑰是文字還是十六進位。
結果和 OpenSSL 一樣嗎?
一樣。printf '%s' 'message' | openssl dgst -sha256 -hmac 'key' 會印出相同的十六進位值,十六進位金鑰則對應 -mac HMAC -macopt hexkey:…。請使用 printf 或 echo -n:單純的 echo 會加上換行,而換行也會被一起簽署。
HMAC-SHA1 還能安全使用嗎?
就 HMAC 而言,實務上是安全的:已知的 SHA-1 碰撞無法破解 HMAC-SHA1,這也是舊的 Webhook 仍在使用它的原因。任何新用途都請選擇 HMAC-SHA256。