Java实现HmacSHA1加密后Base64编码结果与预期不符如何解决
问题定位
你的HmacSHA1加密逻辑本身没有问题,导致结果不符合预期的核心原因是传入的待加密字符串存在多余字符:
- 你传入的待加密字符串开头的
POST前多了1个空格,你当前写的是" POST...",接口要求的待签名字符串开头是无空格的"POST..."
修正方法
仅需要调整调用时传入的待加密字符串,删除开头的多余空格即可,修正后的调用代码如下:
String test = HmacSHA1Encrypt("POST\nmBAcWORUK93FBOz6jsAuqw==\napplication/json\nFri, 26 Jul 2019 06:00:46 GMT\n/v1/api/userStationList", "6680182547");
额外校验注意事项
如果调整后仍存在匹配问题,可逐一检查以下项:
- 待签名字符串中的换行符为
\n(LF格式),不要使用Windows系统默认的\r\n(CRLF格式) - 密钥字符串前后无多余空格、换行等不可见字符
- 所用Base64编码为标准RFC4648格式,你代码中使用的
java.util.Base64.getEncoder()符合要求
内容的提问来源于stack exchange,提问作者sd_dracula
相关产品推荐
相关产品推荐

