Как расшифровать зашифрованный пароль в Node.js - PullRequest
2 голосов
/ 06 января 2012

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

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');
  });

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

Ответы [ 2 ]

17 голосов
/ 06 января 2012

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

1 голос
/ 26 января 2012

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

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

...