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

如何在Windows上使用OpenSSL生成与Linux一致的SHA256 HMAC签名

Windows与Linux生成HMAC签名结果不一致的解决方案

问题根源

  • 原生Windows cmd的echo命令没有-n参数,默认会在输出内容末尾追加\r\n换行符,而Linux的echo -n不会输出任何尾随换行符,待签名的输入字节流不一致直接导致结果不同。
  • 你之前使用的Windows命令存在逻辑错误:将openssl dgst签名命令的参数和待签名的x-date内容混为同一个字符串输出,没有执行实际的哈希签名逻辑,仅对拼接后的长字符串做了Base64编码。

正确的Windows CMD命令写法

密钥为abc时

set /p="x-date: Wed, 13 Oct 2021 09:30:00 GMT"<nul | openssl dgst -binary -sha256 -hmac "abc" | openssl base64

这里用set /p=<nul的方式实现和Linuxecho -n完全等效的无尾随换行输出,待签名内容会通过管道正确传给openssl做哈希计算。

密钥为XciGdDmDTd5a9oArnATg3d3W1OZiJD7X时

set /p="x-date: Wed, 13 Oct 2021 09:30:00 GMT"<nul | openssl dgst -binary -sha256 -hmac "XciGdDmDTd5a9oArnATg3d3W1OZiJD7X" | openssl base64

可选:PowerShell环境写法

如果你使用PowerShell执行,需要手动指定输入编码为ASCII,避免PowerShell默认的UTF-16编码导致输入字节流不一致:

[Text.Encoding]::ASCII.GetBytes("x-date: Wed, 13 Oct 2021 09:30:00 GMT") | openssl dgst -binary -sha256 -hmac "XciGdDmDTd5a9oArnATg3d3W1OZiJD7X" | openssl base64

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:36:05