我正在尝试实现我们正在使用的库的身份验证部分,但我偶然发现了 关于数据签名的奇怪问题,NodeJS中crypto.createHmac的输出大约是PHP中hash_hmac的一半,这是PHP和NodeJS之间不同数据的唯一部分(我们需要使用NodeJS) 在 p>
用于在NodeJS中创建签名的确切代码是, p>
authorization [“oauth_signature”] = crypto.createHmac( 'SHA256',process.env.SECRET).update(toSign).digest('base64');
code> pre>
对于PHP,它是 p> \ n
$ authorization [“oauth_signature”] = base64_encode(hash_hmac(“SHA256”,$ signatureString。$ signingKey,$ secret));
code> pre>
然而,NodeJS版本的输出是 p>
7LkQP + qKR1gSdPq / AgH / 3No3ps7EtZXnqwjivMixvM8 =
code> pre>
对于PHP,它是 p>
NmQ0MWIzYmJiMjI2YzFlMDhiYzY3NzVmMWY0M zEwNDlhNDU3NDI0ZGJlMzU3NjJhYmMwYJgwYzZjMDE4NDM4OA ==
code> pre>
哪个数据有两倍以上 p>
我是否必须为NodeJS版本使用不同的库 而不是建立在一个? 我们在Microsoft Azure btw上托管我们的NodeJS后端,不确定这是否相关但似乎至少可以提及。 p>
编辑: p>
我发现问题,PHP中的hash_hmac自动将其数据作为十六进制数据导出,crypto.createHmac将其数据导出为原始二进制数据,我直接转换为base64,我需要做的就是先将数据导出到十六进制然后转换 到base64。 p>
div>