Я выполняю параллельное сравнение с Ruby, PHP и NodeJS для следующего кода, получая неверный ответ в NodeJS, используя модуль crypto
.
PHP
hash_hmac('sha256', 'text', 'á');
Ruby
OpenSSL::HMAC.hexdigest('sha256', 'á', 'text')
NodeJS
var signer = crypto.createHmac('sha256', 'á');
var expected = signer.update("text").digest('hex');
Как Ruby, так и PHP возвращают 34b3ba4ea7e8ff214f2f36b31c6a6d88cfbf542e0ae3b98ba6c0203330c9f55b
, в то время как, NodeJS возвращает 7dc85acba66d21e4394be4f8ead2a327c9f1adc64a99c710c98f60c425bd7411
.Я заметил, что если я попытаюсь использовать utf8_encode('á')
в PHP, это на самом деле даст мне результат, которого ожидает Node.
Я загружаю акцентированный текст в Node из файла, например, так:
JSON.parse(fs.readFileSync('keys.js', 'utf8'));
Как мне изменить код в Node, чтобы получить результирующий хеш, который присутствует и в PHP, и в Ruby?
Спасибо!