NodeJS HMAC 哈希创建

NodeJS HMAC Hash Creation

我正在尝试学习用 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=

但我的方法没有 return 正确的值。相反,它 return 如下:

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 代码输出一个不同的值,然后它在文档中说它应该。

好的,我用这个工具 writephponline 到 运行 这个 php 代码:

$public = 'JkAFq7M47kLN0xVD';
$private = 'E6X9FyZvMFeJbqtq.IwjlTuR.MKDoicB';

$url = 'https://pterodactyl.local/api/admin/users';
$body = '';

$hmac = hash_hmac('sha256', $url . $body, $private, true);

echo $public . '.' . base64_encode($hmac);

和returns:

JkAFq7M47kLN0xVD./RKZS3U2FKfEt7/tEks4vWwyS+89lL+k8aEGO8NJWuo=

所以我用它作为参数,然后我做了一个小的 nodejs 脚本:

var crypto = require('crypto');

var public = 'JkAFq7M47kLN0xVD';

var private = 'E6X9FyZvMFeJbqtq.IwjlTuR.MKDoicB';

var url = 'https://pterodactyl.local/api/admin/users';

var body = '';

var hmac = crypto.createHmac('sha256', private).update(url+body).digest('base64');

console.log(public + '.' + hmac);

和returns:

JkAFq7M47kLN0xVD./RKZS3U2FKfEt7/tEks4vWwyS+89lL+k8aEGO8NJWuo=

希望对您有所帮助。

我更喜欢使用 crypto-js 加密标准库。本库持续维护中

const crypto = require('crypto-js')

const public = 'JkAFq7M47kLN0xVD'
const private = 'E6X9FyZvMFeJbqtq.IwjlTuR.MKDoicB'
const url = 'https://pterodactyl.local/api/admin/users'
const body = ''

const hmac = crypto.HmacSHA256(url + body, private).toString(crypto.enc.Base64)

console.log(public + '.' + hmac)
// Print value:
// JkAFq7M47kLN0xVD./RKZS3U2FKfEt7/tEks4vWwyS+89lL+k8aEGO8NJWuo=