🔐 HMAC 生成器
專業的 HMAC 簽名生成與驗證工具,支援 HMAC-SHA1/SHA256/SHA512 演算法,適用於 API 簽名和數據完整性驗證
📝 輸入訊息
🔧 選擇演算法
✅ HMAC 簽名結果
🔍 驗證 HMAC 簽名
📚 常用範例
金鑰:secret
🔐 多種演算法
支援 HMAC-SHA1、HMAC-SHA256、HMAC-SHA512 等主流演算法,滿足不同安全需求。
🎯 API 簽名
專為 API 請求簽名設計,支援常見的 HMAC 簽名場景,確保 API 通訊安全。
🔒 隱私保護
所有運算都在瀏覽器本地完成,訊息和金鑰不會上傳到伺服器,完全保護隱私。
📖 使用教學
什麼是 HMAC?
HMAC(Hash-based Message Authentication Code,基於雜湊的訊息認證碼)是一種使用密碼雜湊函數的訊息認證碼。它結合了密鑰和訊息內容,生成一個固定長度的簽名值,用於驗證訊息的完整性和真實性。
HMAC 的主要特性
- 訊息完整性:可檢測訊息是否被篡改
- 身份驗證:確認訊息來自擁有金鑰的發送者
- 不可偽造:沒有金鑰無法生成有效的 HMAC
- 確定性:相同的輸入總是產生相同的 HMAC
使用步驟
- 選擇輸入方式:文字輸入或檔案上傳
- 輸入要簽名的訊息內容
- 輸入 Secret 金鑰
- 選擇 HMAC 演算法(推薦 HMAC-SHA256)
- 選擇輸出格式(Hex 或 Base64)
- 點擊「生成 HMAC 簽名」按鈕
- 複製生成的簽名值使用
API 簽名應用場景
HMAC 廣泛應用於 API 請求簽名:
- AWS API:使用 HMAC-SHA256 簽名所有請求
- GitHub Webhooks:使用 HMAC-SHA1 或 HMAC-SHA256 驗證 Webhook 請求
- Stripe API:使用 HMAC-SHA256 簽名 Webhook 事件
- 自訂 API:保護您的 API 免受未授權訪問
演算法選擇建議
- HMAC-SHA256:✅ 推薦使用,安全性高且效能好
- HMAC-SHA512:更高的安全性,適合高度敏感數據
- HMAC-SHA1:⚠️ 已逐漸被淘汰,僅在必要時使用(如舊系統相容)
安全最佳實踐
- 🔑 金鑰管理:使用足夠長度的隨機金鑰(至少 256 位元)
- 🔐 金鑰保密:絕不在程式碼、版本控制或日誌中暴露金鑰
- 🔄 定期更換:定期輪換金鑰,降低洩露風險
- ⏰ 加入時間戳:防止重放攻擊,建議簽名中包含時間戳
- 🔒 使用 HTTPS:在傳輸 HMAC 簽名時使用加密連線
- ✅ 完整驗證:始終驗證 HMAC 簽名,不信任未驗證的請求
HMAC vs 其他簽名方式
| 方式 | 優點 | 缺點 |
|---|---|---|
| HMAC | 速度快、實作簡單、對稱加密 | 需要共享金鑰、金鑰管理複雜 |
| RSA 簽名 | 非對稱加密、公鑰可公開 | 速度較慢、實作較複雜 |
| JWT | 包含 Payload、自包含 | Token 較大、無法撤銷 |
❓ 常見問題
Q: HMAC 和 Hash 有什麼區別?
A: Hash(如 MD5、SHA256)只對訊息進行雜湊,任何人都可以計算。HMAC 則需要密鑰,只有擁有密鑰的人才能生成有效的 HMAC,因此可以驗證訊息的真實性和完整性。
Q: 輸入的訊息和金鑰會被上傳嗎?
A: 不會。所有 HMAC 運算都在您的瀏覽器本地完成,訊息和金鑰不會傳送到任何伺服器,完全保護您的隱私和安全。
Q: Hex 和 Base64 格式有什麼區別?
A: Hex(十六進位)使用 0-9 和 a-f 字符,長度較長但易讀。Base64 使用 A-Z、a-z、0-9、+、/ 字符,長度較短但包含特殊符號。選擇取決於您的應用需求。
Q: 如何選擇合適的 HMAC 演算法?
A: 對於大多數應用,推薦使用 HMAC-SHA256,它提供了安全性和效能的良好平衡。如果需要更高安全性,可選擇 HMAC-SHA512。避免使用 HMAC-SHA1,除非需要與舊系統相容。
Q: HMAC 金鑰應該多長?
A: 建議 HMAC 金鑰長度至少與雜湊函數的輸出長度相同:SHA256 至少 256 位元(32 字節),SHA512 至少 512 位元(64 字節)。使用隨機生成的金鑰以確保安全性。
Q: 如何在 API 中使用 HMAC 簽名?
A: 典型流程:1) 將請求參數按規則排序並拼接;2) 加入時間戳;3) 使用 HMAC 生成簽名;4) 將簽名添加到請求標頭或參數中;5) 服務器端使用相同方法驗證簽名。
Q: HMAC 可以防止重放攻擊嗎?
A: HMAC 本身不能防止重放攻擊。建議在簽名內容中加入時間戳或 nonce(隨機數),服務器端檢查時間戳是否在有效範圍內,或記錄已使用的 nonce 來防止重放攻擊。