Android ELS HMAC POST API请求验证Node.js结果不符问题求助
排查Node.js计算Google ELS HMAC结果不符的问题
导致结果不匹配的核心原因有两个:
- Payload内容错误:你代码中使用的payload是HTML转义后的
&,但官方示例的原始payload是普通&符号。待签名内容完全不同,直接导致HMAC结果偏差。 - 输出格式不匹配:官方文档的预期HMAC结果是Base64编码的二进制值,而你的代码用
digest('hex')输出十六进制字符串,格式不对应。
修正后的代码如下:
const crypto = require('crypto'); // HMAC密钥(Base64解码) const HMAC_KEY = Buffer.from('ASNFZ4mrze8BI0VniavN7wEjRWeJq83vASNFZ4mrze8BI0VniavN7wEjRWeJq83vASNFZ4mrze8BI0VniavN7w==', 'base64'); // 计算HMAC的函数 function computeHmac(payload) { return crypto.createHmac('sha1', HMAC_KEY) .update(payload, 'utf8') .digest('base64'); // 改为Base64输出,匹配文档要求 } // 修正后的Payload:使用原始&符号 const payload = 'v=2&thunderbird_version=1&emergency_number=911'; const computedHmac = computeHmac(payload); console.log('Computed HMAC:', computedHmac); // 现在输出会匹配预期:e27dce749babe97c1188cf3e272b0492d018e8
内容的提问来源于stack exchange,提问作者Abey Joshy
相关产品推荐
相关产品推荐

