转载自: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. 关于 MyBatis 我总结了 10 种通用的写法
  2. html 页面内锚点定位及跳转方法总结
  3. 【codeforces】【比赛题解】#940 CF Round #466 (Div. 2)
  4. Le Chapitre VI
  5. Java坦克大战 (一) 之产生一个窗口
  6. [2019.3.4]BZOJ1213 [HNOI2004]高精度开根
  7. 上传一批动画教程(链接已失效)
  8. 性能测试脚本之SQLServer执行语句
  9. 堆内存 和 栈内存的简单理解 (未完待续~)
  10. 怎么删除用户_误删的手机照片怎么恢复?三种快速恢复的方法
  11. bitcoin: 何为燃烧地址
  12. 华为android贡献度,米粉别不信,华为对安卓系统的贡献比小米更多
  13. c语言lnk1120,C致命错误LNK1120:1未解决的外部
  14. 单片机应用编程技巧---MCU专家答网友问
  15. C语言 程序 素数圈圈
  16. Android-第九节网络编程
  17. Dataforth数据采集和数据通信风险防护解决方案
  18. 一款视频剪辑软件--爱剪辑
  19. 最新导则下生态环境影响评价及图件制作
  20. 综述:基于深度学习的文本分类 --《Deep Learning Based Text Classification: A Comprehensive Review》总结(一)

热门文章

  1. 谷歌在招什么样的人?
  2. 这 8款开源思维导图工具真的很神奇【程序员必备学习工具】
  3. Apache 2.4.28的安装
  4. webpack之loader篇
  5. Python编写API接口
  6. POJ 2488 A Knight's Journey
  7. UNIX/Linux RHEL6.3 root密码破解,GRUB加密(图文并茂)
  8. 19.高性能MySQL --- 锁的调试
  9. 65. 雇员管理系统(2)
  10. 22. Element lang 属性