web-dev-qa-db-ja.com

Node.jsパスワードのハッシュ

私は現在、パスワードのハッシュに次を使用しています:

var pass_shasum = crypto.createHash('sha256').update(req.body.password).digest('hex');

プロジェクトをより安全にするための改善を提案してください。

39
alditis

次のコードを使用して、パスワードをソルトおよびハッシュします。

var bcrypt = require('bcrypt');

exports.cryptPassword = function(password, callback) {
   bcrypt.genSalt(10, function(err, salt) {
    if (err) 
      return callback(err);

    bcrypt.hash(password, salt, function(err, hash) {
      return callback(err, hash);
    });
  });
};

exports.comparePassword = function(plainPass, hashword, callback) {
   bcrypt.compare(plainPass, hashword, function(err, isPasswordMatch) {   
       return err == null ?
           callback(null, isPasswordMatch) :
           callback(err);
   });
};
83
balazs

bcryptは同期的に呼び出すこともできます。 Coffeescriptのサンプル:

bcrypt = require('bcrypt')

encryptionUtil = 
    encryptPassword: (password, salt) ->
        salt ?= bcrypt.genSaltSync()
        encryptedPassword = bcrypt.hashSync(password, salt)
        {salt, encryptedPassword}

    comparePassword: (password, salt, encryptedPasswordToCompareTo) ->
        {encryptedPassword} = @encryptPassword(password, salt)
        encryptedPassword == encryptedPasswordToCompareTo

module.exports = encryptionUtil
6
jazeee

Node用のbcrypt-nodejsモジュールもあります。 https://github.com/shaneGirish/bcrypt-nodejs

以前は、ここで既に言及したbcryptモジュールを使用していましたが、win7 x64で問題が発生します。一方、bcrypt-nodejsはbcryptの純粋なJS実装であり、まったく依存関係がありません。

4

パスワードの暗号化にbcrypt-jsパッケージを使用できます。

  1. 試すnpm i bcryptjs
  2. varbcrypt = require( 'bcryptjs')上部。
  3. パスワードをハッシュするには:

    bcrypt.genSalt(10, function(err, salt) { bcrypt.hash("B4c0/\/", salt, function(err, hash) { // Store hash in your password DB. }); });

  4. パスワードを確認するには、
    // Load hash from your password DB. bcrypt.compare("B4c0/\/", hash, function(err, res) { // res === true });

Bcryptjsの詳細については、 https://www.npmjs.com/package/bcryptjs をご覧ください。

0
Anand Mainali

Bcryptを使用してみてください。ハッシュを使用してパスワードを保護します。

bcrypt.hash(req.body.password, salt, (err, encrypted) => { user.password = encrypted next() })

ここで、saltは、ハッシュの強度を指定するコスト値です。

ログイン中に、bcrypt.compareメソッドを使用してパスワードを比較します。

 bcrypt.compare(password, user.password, (err, same) => {

            if (same) {
                req.session.userId = user._id
                res.redirect('/bloglist')

            } else {
                res.end('pass wrong')
            }

        })

詳細については、このブログを参照してください: https://medium.com/@nitinmanocha16/bcrypt-and-nodejs-e00a0d1df91f

0
Nitin Manocha