我必须验证 Ruby 服务创建的签名。签名是根据字符串化的 JSON 数据创建的。 问题是,如果数据在嵌套字符串中包含单个反斜杠,则 Node.js 会删除反斜杠。 因此,我创建的签名与我收到的签名不匹配。
我在 Node.js 中创建签名的代码
const calculatedHash = crypto
.createHmac('SHA512', privateKey)
.update(data)
.digest('hex');
如果字符串数据包含反斜杠,如何创建签名?
我尝试过使用替换方法但不起作用。
我应该创建哈希的示例数据
{"changes: {\"recalculated\"=\\u003e\"true\", \"amount\"=\\u003e\"132\"}}
问题似乎出在 JSON 字符串中反斜杠的处理上。问题是,当您创建数据变量时,反斜杠将被视为 JavaScript 字符串中的转义字符。要解决此问题,您可以在 JSON 字符串中使用双反斜杠或使用原始字符串。
这是使用双反斜杠的示例:
javascript 复制代码 const data = '{"更改": {\"重新计算\"=\u003e\"true\", \"金额\"=\u003e\"132\"}}';
常量计算哈希 = 加密 .createHmac('SHA512', 私钥) .更新(数据) .digest('十六进制'); 或者,您可以通过使用反引号 (`) 创建字符串来使用原始字符串:
javascript 复制代码 常量数据 =
{"changes": {\"recalculated\"=\\u003e\"true\", \"amount\"=\\u003e\"132\"}}
;
常量计算哈希 = 加密 .createHmac('SHA512', 私钥) .更新(数据) .digest('十六进制'); 使用反引号可以创建原始字符串,并且不需要转义双引号。
确保选择最适合您的编码风格和要求的方法。