NodeJS застрял в функции cryto.pbkdf2Syn c - PullRequest
0 голосов
/ 09 мая 2020

Итак, я генерирую пароль ha sh, используя случайную строку соли и строку пароля в приложении MEAN Stack. Программа успешно генерирует случайную соль и выводит ее на консоль. Однако он застревает в функции pbkdf2Syn c и не может двигаться вперед.

Это мой код:

const crypto = require('crypto');

UserSchema.methods.setPassword = function(password){
  console.log('start');
  this.salt = crypto.randomBytes(16).toString('hex');
  console.log(this.salt);
  this.hash = crypto.pbkdf2Sync(new Buffer.alloc(password),  new Buffer.alloc(this.salt), 1000, 64, 'sha512').toString('hex');
  console.log(this.hash);
};

Результат:

start
ac09ae82b1fbb5b01257b5fa72bfc8614

И тут программа просто застревает.

Насколько я знаю, функция не устарела. Как мне действовать

1 Ответ

1 голос
/ 09 мая 2020
const crypto = require('crypto');

const hash = (password) => {
  console.log('start');
  const salt = crypto.randomBytes(16).toString('hex');
  console.log(salt);
  const hash = crypto
    .pbkdf2Sync(
      new Buffer.alloc(password.length),
      new Buffer.alloc(salt.length),
      1000,
      64,
      'sha512'
    )
    .toString('hex');
  console.log(hash);
};

hash('hello world');

Это сработало для меня, по сути, alloc ищет количество байтов (размер для выделения в памяти), строка здесь не работает.

Если вы хотите используйте password и salt в качестве заполненных буферов (со значениями), затем используйте второй аргумент (fill) в случае пароля: new Buffer.alloc(password.length, password).

Вместо этого используйте .length чтобы вернуть количество байтов (размер строки), это сгенерировало «правильный» вывод:

start
55387a56bd8ff87ac05be698d938ef04
ab3d65e9e6341a924c752a77b8dc6b78f1e6db5d31df7dd0cc534039dd9662a97bcaf0b959fe78248a49859c7952ddb25d66840f052b27ef1ab60b9446c0c9fd

Ref: https://nodejs.org/api/buffer.html#buffer_class_method_buffer_alloc_size_fill_encoding

...