CodeToolProCodeToolPro
GitHub

HMAC Generator

Message

  • 技术详情

    HMAC 生成器的工作原理

    工具功能

    HMAC(Hash-based Message Authentication Code)生成器使用密钥和哈希函数为消息生成消息认证码。工具支持多种哈希算法(SHA-1、SHA-256、SHA-384、SHA-512、MD5),用户输入消息内容和密钥,工具计算并输出 HMAC 值(通常为十六进制字符串或 Base64 编码)。HMAC 同时验证数据的完整性和真实性——只有持有相同密钥的人才能生成相同的 HMAC。


    常见开发者使用场景

    HMAC 在 Web 安全和 API 认证中广泛应用。在 WebHook 签名中验证推送通知的完整性(如 GitHub、Stripe 的 WebHook 验证);在 JWT Token 中使用 HMAC-SHA256 签名确保 Token 未被篡改;在 API 请求签名中验证请求来源的身份和内容完整性;在 AWS Signature V4 认证中使用 HMAC 派生签名密钥;在 Cookie 签名中防止客户端篡改会话数据。

    对于通用哈希(非消息认证)需求,可以使用 哈希生成器。对于密码哈希(慢哈希)需求,应使用 Bcrypt 工具


    HMAC 算法原理

    HMAC 定义在 RFC 2104 中,使用公式 HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m)),其中 H 是底层哈希函数,K' 是处理后的密钥(填充到哈希函数的块大小),opad 和 ipad 是固定常量(0x5c 和 0x36 的重复)。此双层哈希结构防止了长度扩展攻击,这是普通哈希函数(如 SHA-256(key || message))的安全漏洞。

    HMAC 的安全性取决于密钥的保密性(不依赖于哈希函数的抗碰撞性)。即使底层哈希(如 MD5)被发现有碰撞漏洞,HMAC-MD5 仍然是安全的。但在新系统中推荐使用 SHA-256 或以上。


    常见陷阱与注意事项

    • 密钥长度:密钥长度应至少等于哈希函数的输出长度(SHA-256 为 256 位/32 字节),太短的密钥容易被暴力破解。
    • SHA-1 弃用:SHA-1 已被视为不安全,不应在新系统中使用 HMAC-SHA1。推荐使用 HMAC-SHA256 或 HMAC-SHA512。
    • 时序攻击防护:验证 HMAC 时必须使用常数时间比较(timing-safe comparison),普通的 == 比较可能泄露信息。
    • 密钥管理:HMAC 的安全性完全依赖于密钥的保密性,密钥泄露等于认证机制完全失败。
    • 编码差异:HMAC 输出和输入的消息编码需要一致——如果签名使用 UTF-8 编码消息,验证时也必须使用 UTF-8。

    何时使用此工具而非代码

    在需要快速生成或验证单个 HMAC 签名、测试不同哈希算法和密钥组合、或调试 API 签名逻辑时使用此工具。对于生产环境中的 HMAC 处理,应使用标准密码学库(如 Node.js 的 crypto.createHmac、Python 的 hmac 模块、Web Crypto API 的 SubtleCrypto.sign),它们提供硬件加速和常数时间比较。

    How to Use HMAC Generator

    1. 1Configure your generation settings (length, format, options)
    2. 2Click the Generate button to create new output
    3. 3Review the generated result
    4. 4Copy the output to your clipboard or download it

    Frequently Asked Questions

    • Can I use the generated output in production?

      Yes, all generated values are cryptographically random (where applicable) and ready for production use. No special attribution required.

    • Is HMAC Generator free?

      Yes, 100% free. No registration, no credit card required. All tools are freely available for developers worldwide.

    • Does this tool upload my data to any server?

      No. All processing runs locally in your browser using client-side JavaScript. Your input data, code, or files never leave your device. We do not store, log, or transmit any user data.