Использование SHA-256 с NodeJS Crypto

Я пытаюсь хэшировать переменную в NodeJS так:

var crypto = require('crypto');

var hash = crypto.createHash('sha256');

var code = 'bacon';

code = hash.update(code);
code = hash.digest(code);

console.log(code);

Но похоже, что я неправильно понял документы, поскольку console.log не регистрирует хешированную версию бекона, а только некоторую информацию о SlowBuffer.

Каков правильный способ сделать это?

Ответ 1

base64:

const hash = crypto.createHash('sha256').update(pwd).digest('base64');

шестигранный:

crypto.createHash('sha256').update('password').digest('hex');

Ответ 2

Подобно ответам выше, но это показывает, как сделать несколько записей; например, если вы читаете построчно из файла, а затем добавляете каждую строку к вычислению хеша как отдельную операцию.

В моем примере я также обрезаю новые строки/пропускаю пустые строки (необязательно):

const {createHash} = require('crypto');

// lines: array of strings
function computeSHA256(lines) {
  const hash = createHash('sha256');
  for (let i = 0; i < lines.length; i++) {
    const line = lines[i].trim(); // remove leading/trailing whitespace
    if (line === '') continue; // skip empty lines
    hash.write(line); // write a single line to the buffer
  }

  return hash.digest('base64'); // returns hash as string
}

Я использую этот код, чтобы сгенерированные строки файла не редактировались кем-то вручную. Для этого я выписываю строки, добавляю строку типа sha256:<hash> с суммой sha265, а затем, при следующем запуске, проверяю, что хеш этих строк соответствует указанной сумме sha265.

Ответ 3

nodejs (8) ref

const crypto = require('crypto');
const hash = crypto.createHash('sha256');

hash.on('readable', () => {
    const data = hash.read();
    if (data) {
        console.log(data.toString('hex'));
        // Prints:
        //  6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50
    }
});

hash.write('some data to hash');
hash.end();