在JavaScript / NodeJS

时间:2018-04-09 05:16:13

标签: php node.js

在JavaScript(NodeJS)中,我尝试使用以下PHP过程制作的HMAC签名来验证有效负载的来源:

$raw_json = '{"link":"https://data.com.sg/resource?2f6b5c55-c8cb-4398-875c-a1c69e0d2706"}';  
$payload = json_decode($raw_json, true);  
$signature = hash_hmac('sha256', json_encode($payload), 'SECRET_KEY');

使用类似的JS过程:

const rawJSON = '{"link":"https://data.com.sg/resource?2f6b5c55-c8cb-4398-875c-a1c69e0d2706"}';
const payload = JSON.parse(rawJSON)
const signature = HMACSHA256(JSON.stringify(payload), 'SECRET_KEY');

但我发现JSON.stringify(payload)json_encode($payload)的长度不同。记录这两个数据,我发现在使用链接或/字符(或者任何其他字符)的字符串上执行json_encode时,转义字符会出现问题。

  

JavaScript的JSON.stringify结果

     

{"link":"https://data.com.sg/resource?2f6b5c55-c8cb-4398-875c-a1c69e0d2706"}

     

PHP的json_encode结果

     

{"link":"https:\/\/data.com.sg\/resource?2f6b5c55-c8cb-4398-875c-a1c69e0d2706"}

我无法在PHP系统端更改进程。所以我必须在nodejs系统端调整HMAC生成过程。

可以做些什么让我可以完美地在JavaScript中重现json_encode

请参阅P.S。

P.S。

我已尝试使用某些json_encode模块,但它仍然给我与JSON.stringify相同的结果。

现在我通过添加替换器talked here来解决它。但由于我的有效载荷将充满格式化文本,我关注的是由于/字符以外的字符存在导致的另一种结果差异的可能性。或者我应该不关心它?

0 个答案:

没有答案