Я использую криптографию https://nodejs.org/api/crypto.html для шифрования и аутентификации паролей. Я работаю на странице с паролем изменений и у меня проблема с определением того, имеет ли пароль, предоставленный пользователем, тот же хеш, что и существующий пароль. Ниже мой код.Сравните два хэша пароля - nodejs
var createSalt = function createSalt() {
return crypto.randomBytes(128).toString('base64');
};
var hashPwd = function hashPwd(salt, pwd) {
var hmac = crypto.createHmac('sha256', salt);
return hmac.update(pwd).digest('hex');
};
//use password , create salt, hash and compare with the existing
var salt = createSalt();
var passHash = hashPwd(salt,data.Password);
console.log('the password is', user.PassHash === passHash);
Я ожидаю, если сообщение консоли выше, чтобы напечатать true, когда существующий пароль пользователя совпадает. Однако два хэша, похоже, совсем не совпадают. Пожалуйста, что мне не хватает? Как достичь этого? Я хочу, чтобы пользовательский пароль соответствовал его существующему паролю, прежде чем он сможет изменить новый. Любая помощь будет оценена по достоинству.
Ой спасибо Iwein, поэтому я должен использовать ту же соль право. Я имею в виду вместо того, чтобы создавать новую соль, я должен использовать ее из существующего пароля. ? –
@NuruSalihu да, вот как я это понимаю. Если ваша соль украдена, вам необходимо сбросить все пароли и восстановить соль. Часто crypto libs позволяет вам сравнивать проход без повторной передачи соли (они хранят соль внутри хеширования). bcrypt делает это, например, http://stackoverflow.com/questions/6832445/how-can-bcrypt-have-built-in-salts – iwein