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

热门文章

  1. Java编程框架——Spring Cloud微服务架构实践经验总结
  2. Socket封装之聊天程序(二)
  3. 序列化之Java默认序列化技术(ObjectOutputStream与ObjectInputStream)
  4. pathinfo函数
  5. 关于直线,折线切割平面的问题
  6. 【Gas Station】cpp
  7. SpringMVC入门实例及详细讲解
  8. WSUS 3.0 SP2 部署安装
  9. LINQ分组查询统计
  10. ASP.NET MVC 3 Preview1发布