2012-01-06 18 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

私はここで最善の解決策は、ユーザーがいくつかのセキュリティの質問に答えることができ、そのプロファイルの電子メールに送信されたリンクをクリックしてパスワードをリセットできるようにすることだと思います。彼らは同じパスワードにそれを設定するかもしれませんが、それはあなたの懸念ではありません。これにより、パスワードのハッシュを心配する必要がなくなります。

もちろん、元の申し込みフォームにこれを入力しなかった場合は、これは困難です。しかし、あなたのサービスがまだ実際には開始されていない場合、これは実装が非常に簡単です。

関連する問題