Как проверить хешированный пароль PHP в приложении NodeJS - PullRequest
0 голосов
/ 08 ноября 2019

Мое приложение работало на PHP годами, и я использовал рекомендованный API хеширования паролей , начиная с PHP 5.5, для хранения паролей моих пользователей. Например:

$password = password_hash("my password", PASSWORD_DEFAULT);

В результате моя база данных полна паролей, таких как:

$2y$10$sjzYz7g/kVxpJUynC/...........pjKPh0z1QuU.Mlt7TVAiPW

Теперь я перемещаю свое приложение для запуска на NodeJS 12.3.0 вместо PHPи теперь я использую bcrypt библиотеку примерно так:

const saltRounds = 10;
const password = await bcrypt.hash("my password", saltRounds);

Тот же хеш-пароль для чего-то вроде:

$2b$10$SYZH5Mj4Dy8dkKyRv1O/.........XNGPVBe8nPJjpnEjPZxx.

Я думал, что алгоритм,соль и раунды были в пределах строки, чтобы переход был плавным. Однако, когда я пытаюсь подтвердить пароль, который был сохранен в PHP, правильный пароль не проходит проверку:

// result === false
const result = await bcrypt.compare("my password", phpStoredHash);

Я действительно надеюсь, что мне не придется заставлять всех пользователей сбрасывать свои пароли. Как я могу проверить пароли PHP, хранящиеся в моем NodeJS приложении?

Ответы [ 2 ]

2 голосов
/ 08 ноября 2019

Вместо этого используйте пакет bcryptjs . Он может сравнивать сгенерированные php хэши.

const bcrypt = require('bcryptjs')

const hashPHP = "$2y$10$Lsn001yN38WssfQmJ5hM5.Ywa3AKB76YD/zUC9QNS5BPRr9QMWOTa"
console.log(bcrypt.compareSync("my password", hashPHP));  // outputs: true
0 голосов
/ 08 ноября 2019

Солевых циклов не существует, PASSWORD_DEFAULT использует BCRYPT

$password = password_hash("my password", PASSWORD_DEFAULT);

Попробуйте внести следующие изменения:

$password = password_hash("my password", PASSWORD_BCRYPT);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...