使用bcryptjs对密码加密时,其校验原理是怎样的?
转载自:https://blog.csdn.net/u013810234/article/details/77053011
Question
刚开始接触这种加密方式,而又对加密原理不了解时,很容易产生这种疑问❔:
对一个密码,bcryptjs每次生成的hash都不一样,那么它是如何进行校验的?
Basic verification
虽然对同一个密码,每次生成的hash不一样,但是hash中包含了salt(hash产生过程:先随机生成salt,salt跟password进行hash);
在下次校验时,从hash中取出salt,salt跟password进行hash;得到的结果跟保存在DB中的hash进行比对,compareSync中已经实现了这一过程:bcrypt.compareSync(password, hashFromDB);
Let Code tell you
const bcrypt = require('bcryptjs');const password = "123";// Step1: Generate Hash
// salt is different everytime, and so is hash
let salt = bcrypt.genSaltSync(10);// 10 is by default
console.log(salt);//$2a$10$TnJ1bdJ3JIzGZC/jVS.v3e
let hash = bcrypt.hashSync(password, salt); // salt is inclued in generated hash
console.log(hash);//$2a$10$TnJ1bdJ3JIzGZC/jVS.v3eXlr3ns0hDxeRtlia0CPQfLJVaRCWJVS// Step2: Verify Password
// when verify the password, get the salt from hash, and hashed again with password
let saltFromHash = hash.substr(0, 29);
console.log(saltFromHash);//$2a$10$TnJ1bdJ3JIzGZC/jVS.v3e
let newHash = bcrypt.hashSync(password, saltFromHash);
console.log(newHash);//$2a$10$TnJ1bdJ3JIzGZC/jVS.v3eXlr3ns0hDxeRtlia0CPQfLJVaRCWJVS
console.log(hash === newHash); //true// back end compare
console.log(bcrypt.compareSync(password, hash)); //true
作者:Heartsuit
来源:CSDN
原文:https://blog.csdn.net/u013810234/article/details/77053011
版权声明:本文为博主原创文章,转载请附上博文链接!
使用bcryptjs对密码加密时,其校验原理是怎样的?相关推荐
- 深入解析Express下采用bcryptjs进行密码加密
本篇文章主要介绍了Express下采用bcryptjs进行密码加密的方法,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. bcrypt,是一个跨平 ...
- ss修改服务器加密方式,SSM框架新增/修改用户、用户登录时密码加密处理及校验...
加密技术Md5Crypt需要在pom文件中导入包: commons-codec commons-codec 1.10 一.第一种实现方法 1).新增用户时,对新增后的用户密码进行加密 在userSer ...
- 用户注册密码加密和后端校验的权衡
背景 对于一个系统来说,显然把用户的密码明文存储是大忌,那么必然要加盐加密存储. 在登录注册过程中,密码显然不能明文传输,那么必然会用https来做登录注册接口. 但是 https 并不是绝对安全的, ...
- java中修改密码_java中用户密码加密时增加和修改的代码
建一个MD5.java类 package util; /************************************************ MD5 算法的Java Bean Last M ...
- MD5之C#密码加密-备忘录
MD5算法说明: 加密算法都是对字节数组或流进行加密的.MD5的算法则是对原始的字节数组随机(有算法的随机)抽取几个字节,经过运算后返回新的字节(加密以后的字节).它不 仅可以对字符串进行加密,也可 ...
- 消息摘要算法与密码加密
在Spring Boot项目中,提供了DigestUtils工具类,此工具类的方法可以轻松实现"使用MD5算法"进行运算,从而,可以实现将原始密码进行加密,得到一个加密后的结果. ...
- Android+Java中使用RSA加密实现接口调用时的校验功能
场景 RSA加密 RSA算法是一种非对称加密算法,那么何为非对称加密算法呢? 一般我们理解上的加密是这样子进行的:原文经过了一把钥匙(密钥)加密后变成了密文,然后将密文传递给接收方,接收方再用这把钥匙 ...
- 对于AES和RSA算法的结合使用以及MD5加盐注册登录时的密码加密
RSA和AES结合使用 接上篇的RSA和AES算法加密之后,AES对称算法对数据量大的加密比较快,而RSA公私钥加密的话会影响加密效率,但是AES的加密与解密的密钥是一致的,导致密钥不能外泄,密钥在网 ...
- 前端在登录时如何将用户密码加密
之前用到的是md5,但是最近发现有个新的加密方法AES,和后台沟通后,便拿来试了试. 首先在项目文件夹中创建AES.js,js代码如下: // npm i crypto-js --save下载先,然后 ...
- 对数据库的密码加密:md5和bcryptjs
文章问题导向 如何对密码进行加密?哪种方式更加安全? 如果你都有了答案,可以忽略本文章,或去nest学习导图寻找更多答案 密码加密 一般开发中,是不会有人直接将密码明文直接放到数据库当中的.因为这种做 ...
最新文章
- java注释@para_Java中文档注释各字段的含义是什么?例如author表示作者,para表示参数等...
- mysql去掉两个最高分_从MySQL中的单列获取最高得分值,从两列获取最高得分值...
- dpo指标详解买入绝技_巴菲特点破A股市场:5年前5178点买入5万元上峰水泥股票,持有到现在会有怎样的收益?从贫穷到富有...
- 【Unity】publishing setting keystore作用
- 去除VisualStudio中拼写错误检测的红色波浪线
- Objective-c 字符串的拼接
- (转)threadPoolExecutor 中的 shutdown() 、 shutdownNow() 、 awaitTermination() 的用法和区别
- 查找元器件_电子元器件-常用电子元器件基础知识大全
- HttpSession基础
- 一台变两台,电脑也分身
- 微信云控源码帮您快速复制营销
- vs2010中, 注释导致的怪异现象
- 【智能车学习】FTM模块
- 结构化数据与非结构化数据的区别
- 小米台灯突然自己亮了_除了彩屏和小爱,还有哪些升级?——小米手环4 NFC版...
- 光谱、多光谱技术、高光谱技术以及遥感中的应用
- 584分学计算机报什么大学,高考成绩584分可以上哪些大学,2021年584分怎么填报志愿上什么大学...
- 数据恢复软件哪个好用?点开看看你就知道了
- PCB信仰直尺-开源
- 那些年我们在一线背锅的日子- 运维经理手记