Создать метод, как System.Web.Helpers.Crypto.HashPassword (ASP.NET) в nodejs?

Как я могу создать хэш пароля, используя RFC 2898, например https://docs.microsoft.com/en-us/previous-versions/aspnet/web-frameworks/gg538287(v=vs.111) в nodejs?

Мое приложение nodejs использует таблицу SQL-сервера, в которой поле пароля хэшировано Crypto.HashPassword в ASP.NET, поэтому мне нужно создать ту же функцию в nodejs, чтобы сравнить ее.

1 ответ

const crypto = require('crypto');
const hexChar = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];
const verifyHashedPassword = (password, hashedPwd) => {
  let saltString = '';
  let storedSubKeyString = '';
  const hashedPasswordBytes = new Buffer(hashedPwd, 'base64');
  for (var i = 1; i < hashedPasswordBytes.length; i++) {
    if (i > 0 && i <= 16) {
      saltString += hexChar[(hashedPasswordBytes[i] >> 4) & 0x0f] + hexChar[hashedPasswordBytes[i] & 0x0f];
    }
    if (i > 0 && i > 16) {
      storedSubKeyString += hexChar[(hashedPasswordBytes[i] >> 4) & 0x0f] + hexChar[hashedPasswordBytes[i] & 0x0f];
    }
  }
  const nodeCrypto = crypto.pbkdf2Sync(new Buffer(password), new Buffer(saltString, 'hex'), 1000, 256, 'sha1');
  const derivedKeyOctets = nodeCrypto.toString('hex').toUpperCase();
  return derivedKeyOctets.indexOf(storedSubKeyString) === 0;
};

Я использовал это для сравнения простого пароля с хешированным паролем. Работает хорошо!

Другие вопросы по тегам