使用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学习导图寻找更多答案 密码加密 一般开发中,是不会有人直接将密码明文直接放到数据库当中的.因为这种做 ...
最新文章
- TensorFlow tfjs 0.10.3 发布
- 虚拟机增强工具的安装
- 160个Crackme013之投机取巧
- java word 在线编辑图片_java开发实现word在线编辑及流转
- python中什么是按位取反_Python学习中的“按位取反”笔记总结
- Problem C: 括号匹配(栈和队列)
- xms和xmx为什么要相同_为什么开料机价格相差这么多?秘密在这里,你知道吗?...
- 使用ResourceBundle读取配置文件
- PacketiX ××× Server中三层交换机的路由表配置说明:
- 一网打尽Android UI 控件教程
- Oracle 11gR2数据库使用
- python调用QT界面使用方法
- 全站仪数据导入电脑_南方全站仪怎么连接电脑传输数据
- 我们怎样制作照片拼图?简单实用的拼图方法来了
- activiti使用mysql,启动报错。
- DAP数据分析平台可视化组件开发
- HTML图片热区map area的用法整理
- 网约车租车平台有哪些,网约车租车平台都有哪些功能
- 道路视频摄像机智能分析功能测试规范
- VPS SPS PPS