跳到主要内容
uencoder

如何Use HMAC 为 Authentication

生成 and verify HMAC signatures to authenticate messages and API requests.

问题

你需要prove 该消息或 API 请求是 sent 通过某人谁 knows shared secret 键, 和该 它是 不 modified 在 transit.

前置条件

  • Understanding 的 hash 函数
  • Knowledge 的 shared secret 关键

步骤

  1. 1. Prepare the message and key

    Define the message to authenticate (e.g., an API request body or a timestamp + payload). Agree on a secret key with the other party. The key should be at least as long as the hash output (32 bytes for HMAC-SHA256).

    输入
    message: 'payload' | key: 'secret'
    输出
    ready to sign
  2. 2. Compute the HMAC

    Run HMAC-SHA256 with the key and message. HMAC wraps the hash function with key mixing, producing a tag that only someone with the key can compute. The tag is typically sent as a hex or Base64 string alongside the message.

    输入
    HMAC-SHA256(key, message)
    输出
    tag: a1b2c3...
  3. 3. Verify on the receiving end

    The recipient recomputes the HMAC with the same key and message and compares it to the received tag using a constant-time comparison. If they match, the message is authentic and unmodified. If they differ, reject the message.

    输入
    recomputed tag == received tag
    输出
    verified ✓

预期结果

HMAC tag 该 authenticates 消息源 和完整性, verifiable 通过任何人具有 shared 键.

常见错误

Comparing tags with a non-constant-time comparison
Use a constant-time comparison (e.g., crypto.timingSafeEqual) to prevent timing attacks that leak the tag byte by byte.
Including the key in the message
The key is never sent. Only the message and the HMAC tag are transmitted. The key stays on both sides.

排障指引

  • If verification fails, check that the message is byte-identical on both sides (no encoding differences).
  • Include a timestamp or nonce in the message to prevent replay attacks.

安全限制

  • HMAC security depends on the secrecy of the key and the collision resistance of the underlying hash. Use SHA-256 or stronger.
  • All computation is local.

相关工具

相关词条

参考链接