You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenSSL生成的HMAC-SHA256哈希与在线工具结果不匹配

解决HMAC-SHA256与在线工具结果不匹配的问题

核心排查与修复步骤

1. 改用固定密钥,保证测试可复现

随机生成的密钥每次运行都不同,无法和在线工具做有效对比。替换成你之前输出的固定二进制密钥:

// 替换main函数中gen_secret的调用,使用固定密钥
unsigned char secret[] = {0x49, 0xd8, 0x86, 0x99, 0x9b, 0x10, 0xfa, 0xb3, 0xb7, 0x67, 0x24, 0x52, 0x7e, 0x12, 0x69, 0x62, 0x83, 0x13, 0x88, 0x60};

2. 密钥编码必须严格对应

你提到双方都用base32编码密钥,这里要注意:

  • 程序中的secret是原始二进制数据,需要转成base32字符串(比如上述固定密钥转base32为J5XGIZJAOZXXMZJAMZRWG4TBNZSGS3Q)后,再输入在线工具
  • 若在线工具要求输入原始二进制密钥,则需把hex格式的密钥(49 d8 86 ... 60)转换为二进制后输入,而非base32编码

3. 哈希输出格式要统一

你的程序输出的是十六进制格式的哈希(如4f 2f bc ... b4),在线工具可能默认输出base64或其他格式,需手动设置在线工具输出十六进制,再对比结果。

用上述固定密钥和数据some data to be hashed,程序输出的哈希十六进制为:

4f2fbcb83e927778770eab4f57b309f1883353e7a67f16206dc5f5a56a2695b4

切换在线工具输出为十六进制后,结果应与该值完全一致。

4. 补充代码错误调试逻辑

你的hmac_sha256函数逻辑基本正确,可添加错误打印方便排查:

int hmac_sha256(const unsigned char *key, int key_size, const unsigned char *data, int data_size, unsigned char *md_buffer, unsigned int md_size) {
  if (md_size < 32) return -2;
  unsigned int out_len;
  if (!HMAC(EVP_sha256(), key, key_size, data, data_size, md_buffer, &out_len)) {
    // 打印OpenSSL错误信息
    ERR_print_errors_fp(stderr);
    return -1;
  }
  if (out_len != 32) return -3;
  return 0;
}

5. 确认输入数据完全一致

确保在线工具输入的数据与程序中的"some data to be hashed"完全相同:无多余空格、换行符,编码为UTF-8(C++ std::string默认UTF-8,只要编译环境编码正确即可)。


内容的提问来源于stack exchange,提问作者jnl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 18:15:13