创建 HMAC

计算 HMAC

  1. 通过调用 CryptAcquireContext 获取指向 Microsoft 加密服务提供程序 (CSP) 的指针。
  2. 通过调用 CryptCreateHash 创建 HMAC哈希对象的句柄。 在 Algid 参数中传递CALG_HMAC。 在 hKey 参数中传递对称密钥的句柄。 此对称密钥是用于计算 HMAC 的密钥。
  3. 指定通过调用 CryptSetHashParam 并将 dwParam 参数设置为值HP_HMAC_INFO要使用的哈希类型。 pbData 参数必须指向已初始化HMAC_INFO结构。
  4. 调用 CryptHashData 开始计算数据的 HMAC。 首次调用 CryptHashData 会导致使用 XOR 运算符与内部字符串和数据组合键值。 XOR 操作的结果经过哈希处理,然后对调用 CryptHashData) 传递的 pbData 参数所指向的 HMAC (目标数据进行哈希处理。 如有必要,可以随后调用 CryptHashData 以完成目标数据的哈希处理。
  5. 调用将 dwParam 参数设置为 HP_HASHVAL 的 CryptGetHashParam。 此调用会导致完成内部哈希,并使用 XOR 和 键组合外部字符串。 XOR 操作的结果经过哈希处理,然后对上一步中完成的内部哈希 (的结果进行哈希处理) 。 然后完成外部哈希,并在 pbData 参数dwDataLen 参数中的长度中返回。

注意

不要将相同的 对称 (会话) 密钥用于消息加密和 消息身份验证代码 (MAC) 生成。 将同一密钥用于这两者会大大增加攻击者解码消息的风险。