本篇文章主要介绍了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();});/欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:619586920});
});

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");}/欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:619586920// 释放连接connection.release();});});
});

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

bcrypt.genSalt(10, function(err, salt) {bcrypt.hash("B4c0/\/", salt, function(err, hash) {// Store hash in your password DB.});/欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:619586920
});

密码验证:

bcrypt.compare("B4c0/\/", hash).then((res) => {// res === true
});/欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:619586920

下面是使用Bcrypt对数据加密的一个简单的栗子:

var mongoose = require('mongoose');
// 引入bcrypt模块
var bcrypt = require('bcrypt');
// 定义加密密码计算强度
var SALT_WORK_FACTOR = 10;
/欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:619586920
// 连接数据库
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();})});
});
/欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:619586920
// 编译模型
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);}/欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:619586920
})

结语

感谢您的观看,如有不足之处,欢迎批评指正。

深入解析Express下采用bcryptjs进行密码加密相关推荐

  1. ubuntu10.04.04在windows下采用WUBI安装(nvidia显卡GeForce 405),附带中文输入法安装

    起因:在windwos下安装虚拟机,在运行linux,赶脚系统运行的特慢,还经常卡机:后想在机子上直接安装ubuntu系统,赶脚那个速度,那个体验还是不必win7差的,虽然是10.04的版本:以下是本 ...

  2. 如何在linux系统下修改mysql密码_如何在linux下修改mysql数据库密码?linux修改数据库密码的方法...

    本篇文章给大家带来的内容是介绍如何在linux下修改mysql数据库密码?linux修改数据库密码的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. Linux下修改Mysql的 ...

  3. linux下mysql的root密码忘记解决方

    linux下mysql的root密码忘记解决方 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没 ...

  4. 在Linux环境下mysql的root密码忘记解决方法(三种)

    这篇文章主要介绍了在Linux环境下mysql的root密码忘记解决方法,详细的介绍了3种解决办法,具有一定的参考价值,有兴趣的可以了解一下. MySQL密码的恢复方法之一 1.首先确认服务器出于安全 ...

  5. Express接口综合案例(创建项目、配置常用中间件、路由设计、提取控制器模块、配置错误统一处理中间件、用户注册的数据验证,密码加密)

    一.创建项目 二.目录结构 三.配置常用中间件 3.1 解析请求体 express.json() express.urlencoded() 3.2 日志输出 morgan() 3.3 为客户端提供跨域 ...

  6. 在linux系统下忘记了root密码,在linux系统下,忘记了root密码,可以到()模式下修改找回root密码()...

    在linux系统下,忘记了root密码,可以到()模式下修改找回root密码() 更多相关问题 某分部工程双代号网络图如下图所示,其作图错误表现为().A.有多个起点节点B.有多个终点节 鉴于资源有限 ...

  7. 5.7.24mysql 配置安卓,安卓按键精灵连接MySQL全面解析Windows下安装 mysql5.7的方法

    关于在windows下安装mysql 5.7 •要注意的新坑: 5.7版本安装后ROOT账号是有默认的密码的,这个密码在windows下可以在mysql.ini配置文件指定的data文件夹下面,那个为 ...

  8. linux mysql root免密_Linux下MySQL忘记root密码的完美解决方法

    在使用MySQL数据库时,由于某些原因长时间没有登陆MySQL,或者由于工作交接完成度不高,导致数据库root登陆密码忘记,本文给大家介绍一种当忘记MySQL root密码时的解决办法,亲测有效. 首 ...

  9. linux上mysql5.7忘记密码,Linux下Mysql5.7忘记密码

    一.问题 linux下的mysql5.7忘记密码 二.解决 第一步:打开mysql5.7的配置文件my.cnf,并在里面增加一行:skip-grant-tables   保存并退出(:wq) [roo ...

最新文章

  1. TensorRT Analysis Report分析报告
  2. python试题for循环布尔值_Python自我修炼(升仙中....整数,布尔值,字符串,for循环)
  3. Swift 字典转数组
  4. linux查看并发量的命令
  5. Even Substrings
  6. Little Sub and Sequence
  7. sap 供应商表_SAP系统玩阴的?
  8. 原有磁盘上创建lvm_Linux 系统管理及服务配置实战-第12章 磁盘管理3(连载)
  9. 95-080-040-源码-启动-start-cluster.sh
  10. OC中给我们提供的一个技术:谓词(NSPredicate).note
  11. SCOM2012SP1环境准备和安装
  12. python orderdict_Python OrderedDict字典排序方法详解
  13. idea打包 jar文件
  14. 导入数据库时报错的解决办法汇总
  15. 国密SM2系列算法验证工具
  16. java实现华氏温度和摄氏温度互相转换
  17. 计算机作业我家乡的变化英语作文,家乡的变化 Changes in My Hometown
  18. weblogic-cve_2020_2883漏洞复现
  19. flux 中的 buffer 的原理
  20. Java代码加密混淆工具有哪些?

热门文章

  1. AI性能基准测试从此有了「中国标准」!英伟达、谷歌可以试试
  2. 这是一篇工程师对产品经理的吐槽
  3. SAP SD基础知识之维护中央信贷主数据
  4. 在美人才开始流向中国,因为“硅谷太慢了”
  5. 机器学习成为未来趋势 北美未来将保持最大市场规模
  6. 南京大学人工智能学院院长周志华:培养有源头创新力的人才!
  7. 世界顶级AI大神综述深度学习
  8. 人工智能商业化的重点:语音交互和人脸识别
  9. SAP MM ME55 不能批量审批部分多个PR?
  10. 拟阵(matroid)