PowerShell生成HMAC SHA256哈希适配Kamstrup READy API校验不匹配求助
问题核心原因
你遇到的哈希不匹配问题确实和消息内容的格式化直接相关,有两个核心错误点:
- 消息体包含多余的空白字符:你当前用多行字符串定义的JSON带了换行、缩进、键与值之间的多余空格,Kamstrup API计算签名时使用的是和请求原始payload完全一致的字节流,任何多余的空白字符都会导致哈希结果不一致。
- 编码选择错误:使用ASCII编码计算字节流不符合API规范,API统一使用UTF-8编码处理payload。
修正后的代码
# 使用无多余空白的紧凑JSON格式,和API侧计算时的payload结构完全一致 $message = '{"verificationToken":"e6557603-9121-4c9b-9c38-1a33f56204b0"}' $secret = '6KVQ05mN9iLvCg==' $hmacsha = New-Object System.Security.Cryptography.HMACSHA256 $hmacsha.key = [Convert]::FromBase64String($secret) # 改用不带BOM的UTF8编码获取字节流 $signature = $hmacsha.ComputeHash([Text.Encoding]::UTF8.GetBytes($message)) $signature = [Convert]::ToBase64String($signature) echo $signature $ExpectedHash = 'jm+Inr5EVDgLHbpZaTVjInllgm8Ogs7Ok9mLePiciNc=' # 修正后输出结果将和预期哈希一致
额外注意事项
如果后续对接正式webhook时再次出现哈希不匹配,不要对收到的请求payload做JSON解析后再序列化的操作,直接读取请求的原始字节流参与哈希计算,避免序列化过程改变空白符、字符编码导致结果不一致。
内容的提问来源于stack exchange,提问作者Koen
相关产品推荐
相关产品推荐

