Express下采用bcryptjs进行密码加密的方法

2020-06-17 07:04:38易采站长站整理

前几天利用Express开发了个小项目,开发登录注册模块时,采用bcryptjs进行密码加密,总结了一下内容:

bcrypt,是一个跨平台的文件加密工具。由它加密的文件可在所有支持的操作系统和处理器上进行转移。它的口令必须是8至56个字符,并将在内部被转化为448位的密钥。

除了对您的数据进行加密,默认情况下,bcrypt 在删除数据之前将使用随机数据三次覆盖原始输入文件,以阻挠可能会获得您的计算机数据的人恢复数据的尝试。如果您不想使用此功能,可设定禁用此功能。

bcrypt 使用的是布鲁斯·施内尔在1993年发布的 Blowfish 加密算法。具体来说,bcrypt 使用保罗·柯切尔的算法实现。随 bcrypt 一起发布的源代码对原始版本作了略微改动。

Express下bcryptjs的使用步骤:

1.安装bcryptjs模块


npm install bcryptjs --save

2.在需要加密的模块中引入bcryptjs库


var bcrypt = require('bcryptjs');

3.设置加密强度


var salt = bcrypt.genSaltSync(10);

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


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值,并插入数据库


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) {