菜单

Express下选拔bcryptjs进行密码加密的艺术

2019年5月31日 - JavaScript

后天使用Express开采了个小品种,开拓登六注册模块时,接纳bcryptjs举行密码加密,计算了须臾间内容:

前几Smart用Express开拓了个小项目,开拓登陆注册模块时,接纳bcryptjs进行密码加密,计算了一下内容:
Express下bcryptjs的使用手续:
1.安装bcryptjs模块

bcrypt,是一个跨平台的公文加密工具。由它加密的文件可在具有援助的操作系统和计算机上拓展转变。它的口令必须是捌至伍21个字符,并将要里边被转发为44七人的密钥。

npm install bcryptjs --save

除了对你的数目开始展览加密,默许意况下,bcrypt
在剔除数据以前将选拔随机数据一回覆盖原始输入文件,以阻挡恐怕会博得你的微型Computer数据的人过来数据的品味。如若你不想行使此意义,可设定禁止使用此功效。

二.在急需加密的模块中引入bcryptjs库

bcrypt 使用的是Bruce·施内尔在19玖三年公布的 Blowfish
加密算法。具体来讲,bcrypt 使用Paul·柯切尔的算法完毕。随 bcrypt
一齐发表的源代码对原本版本作了略微改变。

var bcrypt = require('bcryptjs');

Express下bcryptjs的施用手续:

三.设置加密强度

1.安装bcryptjs模块

var salt = bcrypt.genSaltSync(10);
npm install bcryptjs --save

四.报了名时生成HASH值,并插入数据库

贰.在急需加密的模块中引进bcryptjs库

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();
        });
    });
});
var bcrypt = require('bcryptjs');

5.登陆时验证HASH值,并插入数据库

③.设置加密强度

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();
        });
    });
});
var salt = bcrypt.genSaltSync(10);

以上采取的是bcryptjs的同台用法,下边介绍异步用法:
生成hash密码:

4.注册时生成HASH值,并插入数据库

bcrypt.genSalt(10, function(err, salt) {
    bcrypt.hash("B4c0/\/", salt, function(err, hash) {
        // Store hash in your password DB.
    });
});
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值,并插入数据库

bcrypt.compare("B4c0/\/", hash).then((res) => {
    // res === true
});
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();
    });
  });
});

上述采纳的是bcryptjs的一齐用法,下边介绍异步用法:

生成hash密码:

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

密码验证:

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

下边是利用Bcrypt对数据加密的2个总结的栗子:

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

如上正是本文的全体内容,希望对大家的上学抱有协助,也冀望大家多多协助脚本之家。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图