2012-01-06 3 views
2

Я хочу создать страницу смены пароля для пользователя. Я шифрую пароль, когда я сохраняю пользователя в базе данных (mongodb).Как расшифровать зашифрованный пароль в Node.js

User.virtual('password') 
    .set(function(password) { 
     this._password = password; 
     this.salt = this.makeSalt(); 
     this.hashed_password = this.encryptPassword(password); 
    }) 
    .get(function() { return this._password; }); 

    User.method('authenticate', function(plainText) { 
    return this.encryptPassword(plainText) === this.hashed_password; 
    }); 

    User.method('makeSalt', function() { 
    return Math.round((new Date().valueOf() * Math.random())) + ''; 
    }); 

    User.method('encryptPassword', function(password) { 
    return crypto.createHmac('sha1', this.salt).update(password).digest('hex'); 
    }); 

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

ответ

16

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

1

Я думаю, что лучшим решением здесь было бы позволить пользователю ответить на некоторые вопросы безопасности, а затем сможет сбросить пароль, щелкнув ссылку, отправленную по электронной почте в своем профиле. Они могут установить его на один и тот же пароль, но это не ваша проблема. Это позволяет вам не беспокоиться о том, чтобы отключить пароль.

Конечно, это сложнее, если вы не предусмотрели это в оригинальной форме регистрации. Но если ваша служба еще не запущена, это должно быть очень просто реализовать.

Смежные вопросы