【发布时间】:2017-01-05 11:18:43
【问题描述】:
我正在尝试在 API 请求中实现身份验证,但在签署数据时遇到了奇怪的问题。 NodeJS 中 crypto.createHmac 的输出与 PHP 中 hash_hmac 的输出不同。我正在尝试在 PHP 上实现这一点,而 NodeJs 的响应正是我所期望的。
NodeJS 代码
var crypto = require('crypto');
var hmac = crypto.createHmac('sha512', new Buffer(key, 'base64'));
var digest = hmac.update(salt + '\n' + returnUrl).digest();
var signature = digest.toString('base64');
console.log(signature);
PHP 代码
$signature = base64_encode(hash_hmac("sha512",$salt.'\n'.$returnUrl, $key));
echo $signature;
对于我得到的 NodeJS 应用程序
VZ+gH+BVdZl6GIILfN5TFAxEIUqstiD5YwuQYTdk3R4LSxVzsAXPpPpn5MwHDoRllz5ll5iBpAOuO2DQ9nvtGA==
这是预期的响应,但 PHP 给了我不同的结果
NzNlNmFhNWUwOTg2OGQ3NzdhNjU0MWZmOTZhZDZjYmFiYjE4ZjMxZTc5OTk3MDI5ZGI1M2M3YmU3MjRiYTdiNjJmODM4NDA1NmMzNWZlOWE2NTVkZjhmZTg4MDg0MjA3ZmYzMjg1MGQxYzFiZDNkODA2M2MzZGVhOTRiZWMzNTA=
这与预期完全不同。有没有办法可以在 PHP 中重新创建 NodeJS 加密功能并获得相同的响应。
【问题讨论】: