HMAC 生成器
HMAC 生成器
使用 HMAC 簽署並驗證訊息。在你的瀏覽器中計算七種演算法 — 資料不會離開此頁面。
演算法
範例
點擊預設以載入已知訊息和金鑰。
關於 HMAC 生成器
HMAC(基於雜湊的訊息認證碼)是 webhook 簽章驗證的主力。給它一個訊息和一個金鑰,它會產生一個有鍵摘要,接收方用相同的金鑰可以驗證。 此工具在你的瀏覽器中運行七種 HMAC 變體 — 不會向任何伺服器發送資料 — 並為你提供每行的「複製為 curl header」和「複製為 Python 片段」操作, 以便你可以將結果直接放入 shell 工作階段或驗證腳本中。
七種演算法
- HMAC-MD5 — 舊版(Stripe v1 webhooks、RADIUS、一些內部通訊協定)。僅出於相容性而包含;不要用於新設計。
- HMAC-SHA-1 — 在舊版 webhook 提供商和 AWS v2 簽章中仍然常見。
- HMAC-SHA-256 — 主力。Stripe v2、GitHub、Slack、Shopify 以及 JWT HS256 的預設都使用它。
- HMAC-SHA-512 — 一些銀行和高安全性 API 使用它。
- HMAC-SHA3-256 和 HMAC-SHA3-512 — NIST FIPS 202 SHA-3 系列,在更新的規範和 IoT 簽章通訊協定中越來越多地被使用。
- HMAC-RIPEMD-160 — 用於比特幣地址衍生和少數歐洲銀行通訊協定。
以常數時間驗證簽章
工具的驗證部分貼上傳入的簽章(帶有提供商特定的前綴解析 — 見下文),並使用逐位元組 XOR 累加器將其與新計算的值進行比較, 該累加器的執行時間與輸入長度成正比,而不是與第一個不同位元組的位置成正比。當遠端攻擊者可以對你的驗證路徑計時,這是正確的比較形式。 關閉常數時間模式以查看差異(匹配值相同,但警告出現,作為提醒不要在生產中使用它)。
提供商前綴解析
實際的傳入簽章被包裝在提供商特定的前綴中:GitHub 使用 sha256=<hex>,Slack 使用
v0=<hex>,Stripe 使用複合的 t=<ts>,v1=<hex>,v0=<hex>。
工具自動偵測這些前綴,去除它們,並顯示一個可見的註解,描述被去除的內容。切換
按字面值處理輸入以停用解析和標準化(對於測試解析器本身或具有非標準格式的提供商很有用)。
複製為 curl header 或 Python 驗證程式
每行的複製為 curl header操作生成一個可貼上的 curl -H 'Header: <hex>' 行;複製為 Python
操作生成使用標準函式庫 hmac 模組的程式碼片段,該片段始終以 hmac.compare_digest(標準函式庫的常數時間比較)結尾。
Python 程式碼片段忠實地反映活動的金鑰編碼:hex 金鑰使用 bytes.fromhex,base64 金鑰使用
base64.b64decode,UTF-8 金鑰使用 b'…' 字面值。
內建的 webhook 提供商預設
- RFC 2202 / RFC 4231 參考向量("Jefe" / "what do ya want for nothing?" 的 HMAC-SHA-1 和 HMAC-SHA-256)。
- Stripe v2 webhook(hex 編碼的
whsec_金鑰,複合的t=<ts>.<body>訊息)。 - GitHub webhook(UTF-8 金鑰,JSON body,
sha256=前綴)。 - Slack 請求簽章(UTF-8 金鑰,
v0:<ts>:<body>訊息)。 - JWT HS256 簽章(base64 編碼的金鑰,
header.payload訊息,base64url 簽章)。
點擊預設以載入訊息、金鑰、期望簽章、curl 標頭名稱和前綴解析器 — 對應的行將顯示相符, 以便你在信任你自己的資料之前確認工具實作正確。
常見用途
- 驗證傳入的 webhook 簽章(Stripe、GitHub、Slack、自訂)。
- 在腳本或終端中重新產生簽章以與上游服務進行比較。
- 在編寫驗證程式碼時為新的 webhook 整合產生期望簽章。
- 透過比較相同訊息和金鑰來學習 HMAC-SHA-256 和 HMAC-SHA3-256 之間的區別。
- 根據已發佈的測試向量稽核第三方函式庫的 HMAC 實作。
安全說明
所有計算都在瀏覽器中執行。任何訊息、金鑰或計算的 HMAC 都不會發送到任何伺服器。清空全部 按鈕一鍵清除訊息、金鑰和期望簽章欄位 — 但它不會在分頁隱藏、導覽或任何其他自動觸發時自動清除, 所以你的工作流程(貼上金鑰,切換到終端,貼上 curl,切換回來,調整)可以繼續工作。
留言
請接受「功能性」Cookie 類別以查看和發表留言。
留言載入失敗。您可以重試,或前往 GitHub 查看討論。
在 GitHub 上查看