如何避免在 Node.js 中删除反斜杠

问题描述 投票:0回答:1

我必须验证 Ruby 服务创建的签名。签名是根据字符串化的 JSON 数据创建的。 问题是,如果数据在嵌套字符串中包含单个反斜杠,则 Node.js 会删除反斜杠。 因此,我创建的签名与我收到的签名不匹配。

我在 Node.js 中创建签名的代码

const calculatedHash = crypto
        .createHmac('SHA512', privateKey)
        .update(data)
        .digest('hex');

如果字符串数据包含反斜杠,如何创建签名?

我尝试过使用替换方法但不起作用。

我应该创建哈希的示例数据

{"changes: {\"recalculated\"=\\u003e\"true\", \"amount\"=\\u003e\"132\"}}

javascript node.js ruby hash backslash
1个回答
0
投票

问题似乎出在 JSON 字符串中反斜杠的处理上。问题是,当您创建数据变量时,反斜杠将被视为 JavaScript 字符串中的转义字符。要解决此问题,您可以在 JSON 字符串中使用双反斜杠或使用原始字符串。

这是使用双反斜杠的示例:

javascript 复制代码 const data = '{"更改": {\"重新计算\"=\u003e\"true\", \"金额\"=\u003e\"132\"}}';

常量计算哈希 = 加密 .createHmac('SHA512', 私钥) .更新(数据) .digest('十六进制'); 或者,您可以通过使用反引号 (`) 创建字符串来使用原始字符串:

javascript 复制代码 常量数据 =

{"changes": {\"recalculated\"=\\u003e\"true\", \"amount\"=\\u003e\"132\"}}
;

常量计算哈希 = 加密 .createHmac('SHA512', 私钥) .更新(数据) .digest('十六进制'); 使用反引号可以创建原始字符串,并且不需要转义双引号。

确保选择最适合您的编码风格和要求的方法。

© www.soinside.com 2019 - 2024. All rights reserved.