【发布时间】:2017-06-17 08:07:07
【问题描述】:
我正在尝试遵循用 PHP 编写的 API 教程的一部分。他们展示了以下示例:
$public = 'JkAFq7M47kLN0xVD';
$private = 'E6X9FyZvMFeJbqtq.IwjlTuR.MKDoicB';
$url = 'https://pterodactyl.local/api/admin/users';
$body = '';
$hmac = hash_hmac('sha256', $url . $body, $private, true);
return $public . '.' . base64_encode($hmac);
// Should return the string below:
//
// JkAFq7M47kLN0xVD.wgIxj+V8RHgIetcQg2lRM0PRSH/y5M21cPz9zVhfFaQ=
但是我的方法没有返回正确的值。相反,它返回以下内容:
JkAFq7M47kLN0xVD./RKZS3U2FKfEt7/tEks4vWwyS+89lL+k8aEGO8NJWuo=
这是我的代码:
hmac = crypto.createHmac('sha256', private_key);
hmac.write(url+body);
hmac.end();
hash = hmac.read().toString('base64');
console.log(hash);
编辑:我认为他们提供的示例是无效的,因为每个人都说我的代码几乎相同,而 PHP 代码输出的值与文档中说的不同。
【问题讨论】:
-
“应该返回下面的字符串” - 嗯,它没有。您的 PHP 代码和您的 node.js 代码当前是等效的。也许您应该检查您的 PHP 代码是否真的按照您的想法运行。
-
这不是公钥加密的工作方式。 HMAC 是一个对称组件。
-
@ArtjomB.这不是公钥加密的工作原理吗?
-
@ArtjomB。这不是公钥加密是一件好事。这只是一个客户端身份验证标头。如果您正确阅读问题,则与密钥无关。
标签: php node.js encryption cryptography hmac