Что эквивалентно hmac.new в node.js? - PullRequest
1 голос
/ 16 мая 2019

Я хочу HMAC SHA256 хешировать нормализованный запрос, используя секрет клиента, и base64 кодирует результат. Я получаю разные результаты в python и typeScript. Моя цель - достичь python результата в typeScript. Как это сделать?

Я смог преобразовать hashlib.sha256 ( Вот мой подход ) в typeScript эквивалент, но не уверен насчет hmac.new

Код Python:

import hashlib
import hmac
import base64

request = "Hello World";
secret = "MySecret"

requestBytes = bytes(request.encode('utf-8'))
secretBytes = bytes(secret.encode('utf-8'))
hmacConversion = hmac.new(secretBytes, requestBytes, digestmod=hashlib.sha256).digest()
signature = base64.b64encode(hmacConversion)
print(signature)

Выход:

b'm4nZSWE3Y/tPXToy/0cJMGpR2qpsXgCnF3tsSiZtYt0='

Пример кода

Код машинописного текста:

var secret = "Hello World";
var body = "MySecret";

var hmac = crypto.createHmac("sha256", secret)
                 .update(Buffer.from(body, 'utf-8'))
                 .digest('hex');
console.log(hmac);


var hmac2 = crypto.createHmac("sha256", secret)
                 .update(body, 'utf-8')
                 .digest('hex');
console.log(hmac2);

Выход:

f1f157335b0982cbba94290163d61582a87352817788b793238817dd631c26d4

Пример кода

1 Ответ

0 голосов
/ 16 мая 2019

Я нашел ответ. Это очень глупая ошибка, где я провел 1 день. Надеюсь, это спасет чей-то день.

Код:

var crypto = require('crypto');

// Below was silly mistake. In my question those parameters are swapped.
var body = "Hello World"; 
var secret = "MySecret";

var hmac = crypto.createHmac("sha256", secret )
                 .update(body)
                 .digest('base64')
console.log(hmac);

Выход:

m4nZSWE3Y/tPXToy/0cJMGpR2qpsXgCnF3tsSiZtYt0=

Пример кода

...