Как работает цепочка криптографических методов nodejs? - PullRequest
0 голосов
/ 15 ноября 2018

Что делают каждый из вызовов цепочек методов в следующем примере кода:

var crypto = require('crypto');

const secret = 'abcdefg';
const hash = crypto.createHmac('sha256', secret)
       .update('I love cupcakes')
       .digest('base64');
console.log(hash);

// Prints:
// wPobwAUxvXjvOMYoRJxRAq6r1Jtdw6KlFupuqVnWZY4=

Я пытаюсь сделать то же самое в Swift и не могу получить окончательный хэш.

Я думал, что это было следующим:

1) crypto.createHmac ('sha256', secret) // инициализируем объект crypto

2) .update ('I love cupcakes') // sha256 хэш' I love cupcakes 'с секретным ключом

3) digest (' base64 ') // base 64 кодирует результат из 2

Однако это не тактак как выполнение этих операций в командной строке дает другой результат.

Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 15 ноября 2018
var crypto = require('crypto');

const secret = 'abcdefg';
const hash = crypto.createHmac('sha256', secret)
   .update('I love cupcakes')
   .digest('base64');
console.log(hash);

// Prints:
// wPobwAUxvXjvOMYoRJxRAq6r1Jtdw6KlFupuqVnWZY4=
  1. crypto.createHmac ('sha256', secret) - не требует пояснений, инициализирует объект crypto hmac.

  2. .update ('Я люблю кексы') - Второй отсутствующий аргумент - это кодирование данных, которые вы передаете для хэширования, так как он пропущен, он принудительно передается в строку utf-8, вы можете передать в буфер и указать кодировку или типизированный массиви укажите кодировку и т. д. Метод обновления можно вызывать несколько раз, чтобы добавить дополнительные строки, буферы и т. д. в конец данных, передаваемых таким образом, если вы получаете порции данных, вы можете передавать их по мере их поступления.

  3. digest ('base64') - это последний вызов после того, как вы дайджест, по сути, говорите, что я добавил данные в этот хэш и вычислил результаты в формате base64, вы можететакже передайте в других форматах, чтобы вернуть хэш. Важно помнить, что после того, как вы вызовете дайджест, хеш уже не будет добавлен, и вам нужно будет создатьНовая переменная hmac для создания другого hmac, даже если используются те же параметры.

ex.

const crypto = require('crypto');

const secret = 'abcdefg';
const hash = crypto.createHmac('sha256', secret);
hash.update('I ', 'utf8');
hash.update('love ', 'utf8');
hash.update('cupcakes', 'utf8');
hash.digest('base64');
console.log(hash);

Это должно вернуть то же самое.Если вы используете windows cmd.exe, я считаю, что windows использует другую кодировку, нежели utf8, вам придется проверить это или создать файл js узла, передавая аргументы и хешируя, а затем входя в консоль вместо использования REPL * 1019.*

...