Express下采用bcryptjs进行密码加密的方法
前几天利用Express开发了个小项目,开发登录注册模块时,采用bcryptjs进行密码加密,总结了一下内容:
bcrypt,是一个跨平台的文件加密工具。由它加密的文件可在所有支持的操作系统和处理器上进行转移。它的口令必须是8至56个字符,并将在内部被转化为448位的密钥。
除了对您的数据进行加密,默认情况下,bcrypt在删除数据之前将使用随机数据三次覆盖原始输入文件,以阻挠可能会获得您的计算机数据的人恢复数据的尝试。如果您不想使用此功能,可设定禁用此功能。
bcrypt使用的是布鲁斯·施内尔在1993年发布的Blowfish加密算法。具体来说,bcrypt使用保罗·柯切尔的算法实现。随bcrypt一起发布的源代码对原始版本作了略微改动。
Express下bcryptjs的使用步骤:
1.安装bcryptjs模块
npminstallbcryptjs--save
2.在需要加密的模块中引入bcryptjs库
varbcrypt=require('bcryptjs');
3.设置加密强度
varsalt=bcrypt.genSaltSync(10);
4.注册时生成HASH值,并插入数据库
router.post('/register',function(req,res,next){
//从连接池获取连接
pool.getConnection(function(err,connection){
//获取前台页面传过来的参数
varparam=req.query||req.params;
/*生成HASH值*/
varhash=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){
//获取前台页面传过来的参数
varparam=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){
//StorehashinyourpasswordDB.
});
});
密码验证:
bcrypt.compare("B4c0/\/",hash).then((res)=>{
//res===true
});
下面是使用Bcrypt对数据加密的一个简单的栗子:
varmongoose=require('mongoose');
//引入bcrypt模块
varbcrypt=require('bcrypt');
//定义加密密码计算强度
varSALT_WORK_FACTOR=10;
//连接数据库
mongoose.connect('mongodb://localhost:27017/test')
//定义用户模式
varUserSchema=newmongoose.Schema({
name:{
unique:true,
type:String
},
password:{
unique:true,
type:String
}
},{collection:"user"});
//使用pre中间件在用户信息存储前进行密码加密
UserSchema.pre('save',function(next){
varuser=this;
//进行加密(加盐)
bcrypt.genSalt(SALT_WORK_FACTOR,function(err,salt){
if(err){
returnnext(err);
}
bcrypt.hash(user.password,salt,function(err,hash){
if(err){
returnnext(err);
}
user.password=hash;
next();
})
});
});
//编译模型
varUserBox=mongoose.model('UserBox',UserSchema);
//创建文档对象实例
varuser=newUserBox({
name:"Jack",
password:"123456"
});
//保存用户信息
user.save(function(err,user){
if(err){
console.log(err);
}else{
//如果保存成功,打印用户密码
console.log("password:"+user.password);
}
})
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。