Heim  >  Artikel  >  Web-Frontend  >  Verwendung der bcryptjs-Passwortverschlüsselung in Express

Verwendung der bcryptjs-Passwortverschlüsselung in Express

亚连
亚连Original
2018-06-07 13:38:082077Durchsuche

In diesem Artikel wird hauptsächlich die Methode zur Verwendung von bcryptjs zur Passwortverschlüsselung unter Express vorgestellt. Jetzt teile ich sie mit Ihnen und gebe sie als Referenz.

Vor ein paar Tagen habe ich ein kleines Projekt mit Express entwickelt. Bei der Entwicklung des Anmelde- und Registrierungsmoduls wurde bcryptjs für die Passwortverschlüsselung verwendet:

bcrypt ist ein Cross-. Plattform-Dateiverschlüsselungstool. Damit verschlüsselte Dateien können auf allen unterstützten Betriebssystemen und Prozessoren übertragen werden. Sein Passwort muss zwischen 8 und 56 Zeichen lang sein und wird intern in einen 448-Bit-Schlüssel umgewandelt.

Zusätzlich zur Verschlüsselung Ihrer Daten überschreibt bcrypt standardmäßig die ursprüngliche Eingabedatei dreimal mit zufälligen Daten, bevor es sie löscht, um Wiederherstellungsversuche durch jemanden zu verhindern, der möglicherweise Zugriff auf Ihre Computerdaten erhält. Wenn Sie diese Funktion nicht nutzen möchten, können Sie sie deaktivieren.

bcrypt verwendet den 1993 von Bruce Schnell veröffentlichten Blowfish-Verschlüsselungsalgorithmus. Konkret wird bcrypt mit dem Algorithmus von Paul Kircher implementiert. Der mit bcrypt verteilte Quellcode ist gegenüber der Originalversion leicht verändert.

Schritte zur Verwendung von bcryptjs unter Express:

1. Installieren Sie das bcryptjs-Modul

npm install bcryptjs --save

2. Führen Sie die bcryptjs-Bibliothek in das Modul ein, das eine Verschlüsselung erfordert

var bcrypt = require('bcryptjs');

3. Verschlüsselungsstärke einstellen

var salt = bcrypt.genSaltSync(10);

4. HASH-Wert bei der Registrierung generieren und in die Datenbank einfügen

router.post('/register', function(req, res, next){
  // 从连接池获取连接
  pool.getConnection(function(err, connection) {
    // 获取前台页面传过来的参数
    var param = req.query || req.params;
    /*生成HASH值*/
    var hash = bcrypt.hashSync(param.pwd,salt);
    // 建立连接 新增用户
    connection.query(userSQL.insert, ["",hash,param.phone,"","","",0], function(err, result) {
      res.send(result);
      // 释放连接
      connection.release();
    });
  });
});

5. HASH-Wert beim Anmelden überprüfen und in die Datenbank einfügen

router.post('/login', function(req, res, next){
  // 从连接池获取连接
  pool.getConnection(function(err, connection) {
    // 获取前台页面传过来的参数
    var param = req.query || req.params;
    // 建立连接 根据手机号查找密码
    connection.query(userSQL.getPwdByPhoneNumber, [param.phone], function(err, result) {
      if(bcrypt.compareSync(param.pwd,result[0].password)){
        res.send("1");
        connection.query(userSQL.updateLoginStatusById, [1,result[0].id], function(err, result) {
        });
      }else{
        res.send("0");
      }
      // 释放连接
      connection.release();
    });
  });
});

Das Obige verwendet die synchrone Verwendung von bcryptjs. Die asynchrone Verwendung wird unten vorgestellt:

Hash-Passwort generieren:

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

Passwortüberprüfung:

bcrypt.compare("B4c0/\/", hash).then((res) => {
  // res === true
});

The Im Folgenden finden Sie die Verwendung von Bcrypt zur Überprüfung der Daten. Ein einfaches Beispiel für die Verschlüsselung:

var mongoose = require('mongoose');
// 引入bcrypt模块
var bcrypt = require('bcrypt');
// 定义加密密码计算强度
var SALT_WORK_FACTOR = 10;

// 连接数据库
mongoose.connect('mongodb://localhost:27017/test')

// 定义用户模式
var UserSchema = new mongoose.Schema({
  name: {
    unique: true,
    type: String
  },
  password: {
    unique: true,
    type: String
  }
},{ collection: "user"});

// 使用pre中间件在用户信息存储前进行密码加密
UserSchema.pre('save', function(next){
  var user = this;

  // 进行加密(加盐)
  bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt){
    if(err){
      return next(err);
    }
    bcrypt.hash(user.password, salt, function(err, hash){
      if(err){
        return next(err);
      }
      user.password = hash;
      next();
    })
  });
});

// 编译模型
var UserBox = mongoose.model('UserBox', UserSchema);

// 创建文档对象实例
var user = new UserBox ({
  name : "Jack" ,
  password : "123456"
});

// 保存用户信息
user.save(function(err, user){
  if(err){
    console.log(err);
  }else{
    // 如果保存成功,打印用户密码
    console.log("password: " + user.password);
  }
})

Das Obige habe ich für alle zusammengestellt. Ich hoffe, dass es in Zukunft für alle hilfreich sein wird.

Verwandte Artikel:

Gekapselte Cache-Klasse, implementiert über Redis als Cache in NodeJS

Verwendung von nativem JavaScript, um den Lupeneffekt zu erzielen

Detaillierte Analyse des Vue Socket.io-Quellcodes

Das obige ist der detaillierte Inhalt vonVerwendung der bcryptjs-Passwortverschlüsselung in Express. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn