转载自: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对密码加密时,其校验原理是怎样的?相关推荐

  1. 深入解析Express下采用bcryptjs进行密码加密

    本篇文章主要介绍了Express下采用bcryptjs进行密码加密的方法,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. bcrypt,是一个跨平 ...

  2. ss修改服务器加密方式,SSM框架新增/修改用户、用户登录时密码加密处理及校验...

    加密技术Md5Crypt需要在pom文件中导入包: commons-codec commons-codec 1.10 一.第一种实现方法 1).新增用户时,对新增后的用户密码进行加密 在userSer ...

  3. 用户注册密码加密和后端校验的权衡

    背景 对于一个系统来说,显然把用户的密码明文存储是大忌,那么必然要加盐加密存储. 在登录注册过程中,密码显然不能明文传输,那么必然会用https来做登录注册接口. 但是 https 并不是绝对安全的, ...

  4. java中修改密码_java中用户密码加密时增加和修改的代码

    建一个MD5.java类 package util; /************************************************ MD5 算法的Java Bean Last M ...

  5. MD5之C#密码加密-备忘录

    MD5算法说明:  加密算法都是对字节数组或流进行加密的.MD5的算法则是对原始的字节数组随机(有算法的随机)抽取几个字节,经过运算后返回新的字节(加密以后的字节).它不 仅可以对字符串进行加密,也可 ...

  6. 消息摘要算法与密码加密

    在Spring Boot项目中,提供了DigestUtils工具类,此工具类的方法可以轻松实现"使用MD5算法"进行运算,从而,可以实现将原始密码进行加密,得到一个加密后的结果. ...

  7. Android+Java中使用RSA加密实现接口调用时的校验功能

    场景 RSA加密 RSA算法是一种非对称加密算法,那么何为非对称加密算法呢? 一般我们理解上的加密是这样子进行的:原文经过了一把钥匙(密钥)加密后变成了密文,然后将密文传递给接收方,接收方再用这把钥匙 ...

  8. 对于AES和RSA算法的结合使用以及MD5加盐注册登录时的密码加密

    RSA和AES结合使用 接上篇的RSA和AES算法加密之后,AES对称算法对数据量大的加密比较快,而RSA公私钥加密的话会影响加密效率,但是AES的加密与解密的密钥是一致的,导致密钥不能外泄,密钥在网 ...

  9. 前端在登录时如何将用户密码加密

    之前用到的是md5,但是最近发现有个新的加密方法AES,和后台沟通后,便拿来试了试. 首先在项目文件夹中创建AES.js,js代码如下: // npm i crypto-js --save下载先,然后 ...

  10. 对数据库的密码加密:md5和bcryptjs

    文章问题导向 如何对密码进行加密?哪种方式更加安全? 如果你都有了答案,可以忽略本文章,或去nest学习导图寻找更多答案 密码加密 一般开发中,是不会有人直接将密码明文直接放到数据库当中的.因为这种做 ...

最新文章

  1. java注释@para_Java中文档注释各字段的含义是什么?例如author表示作者,para表示参数等...
  2. mysql去掉两个最高分_从MySQL中的单列获取最高得分值,从两列获取最高得分值...
  3. dpo指标详解买入绝技_巴菲特点破A股市场:5年前5178点买入5万元上峰水泥股票,持有到现在会有怎样的收益?从贫穷到富有...
  4. 【Unity】publishing setting keystore作用
  5. 去除VisualStudio中拼写错误检测的红色波浪线
  6. Objective-c 字符串的拼接
  7. (转)threadPoolExecutor 中的 shutdown() 、 shutdownNow() 、 awaitTermination() 的用法和区别
  8. 查找元器件_电子元器件-常用电子元器件基础知识大全
  9. HttpSession基础
  10. 一台变两台,电脑也分身
  11. 微信云控源码帮您快速复制营销
  12. vs2010中, 注释导致的怪异现象
  13. 【智能车学习】FTM模块
  14. 结构化数据与非结构化数据的区别
  15. 小米台灯突然自己亮了_除了彩屏和小爱,还有哪些升级?——小米手环4 NFC版...
  16. 光谱、多光谱技术、高光谱技术以及遥感中的应用
  17. 584分学计算机报什么大学,高考成绩584分可以上哪些大学,2021年584分怎么填报志愿上什么大学...
  18. 数据恢复软件哪个好用?点开看看你就知道了
  19. PCB信仰直尺-开源
  20. 那些年我们在一线背锅的日子- 运维经理手记

热门文章

  1. 动态添加GRIDVIEW内容 和数据绑定
  2. GenericObjectPool参数解析
  3. python S2-45 漏洞利用工具
  4. virtualbox中给CentOS根分区扩容的方法
  5. 创建Orcale数据库链接访问外部数据库
  6. 1.软件工程--软件建模与文档协作 --- 软件开发过程
  7. 2.分布式服务架构:原理、设计与实战 --- 彻底解决分布式系统一致性的问题
  8. 9.企业安全建设入门(基于开源软件打造企业网络安全) --- SOC系统建设
  9. 2.http dns
  10. 22. jQuery 遍历 - 同胞