使用bcryptjs对密码加密时,其校验原理是怎样的?
来源:互联网 发布:cdnn软件 编辑:程序博客网 时间:2024/05/20 16:43
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 hashlet salt = bcrypt.genSaltSync(10);// 10 is by defaultconsole.log(salt);//$2a$10$TnJ1bdJ3JIzGZC/jVS.v3elet 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 passwordlet saltFromHash = hash.substr(0, 29);console.log(saltFromHash);//$2a$10$TnJ1bdJ3JIzGZC/jVS.v3elet newHash = bcrypt.hashSync(password, saltFromHash);console.log(newHash);//$2a$10$TnJ1bdJ3JIzGZC/jVS.v3eXlr3ns0hDxeRtlia0CPQfLJVaRCWJVSconsole.log(hash === newHash); //true// back end compareconsole.log(bcrypt.compareSync(password, hash)); //true
If you have any questions or any bugs are found, please feel free to contact me.
Your comments and suggestions are welcome!
阅读全文
1 0
- 使用bcryptjs对密码加密时,其校验原理是怎样的?
- SimpleDateFormat是线程不安全的,怎样使用使其安全?
- 保护光盘数据的八种加密方法 为了防止盗版软件对软件市场的侵害,越来越多的软件商使用加密方法来保护自己的软件。尽管目前加密光盘的方法有很多种,但其主要原理是利用特殊的光盘母盘上的某些特征信息是不可再现的
- CGI、fastCGI、php-fpm都是什么?其工作原理流程是怎样的?
- 使用MD5对密码进行加密的功能的实现
- discuz 对密码的加密
- 使用durid的ConfigFilter对数据库密码加密
- 使用jasypt对springboot的datasource密码加密
- 使用jasypt对springboot的datasource密码加密
- 使用durid的ConfigFilter对数据库密码加密
- C#:使用MD5对密码进行加密!
- 使用MD5对密码进行加密
- 使用MD5对密码进行加密
- 使用druid对数据库密码加密
- 使用MD5对明文密码进行加密
- 使用Md5算法对密码进行加密
- Java中密码的校验以及加密函数
- Android和Ios使用md5对图片加密校验一致
- Matlab批量修改文件名
- ?350. Intersection of Two Arrays II (Java)
- 题目111-分数加减法
- Windows CMD命令
- C语言模拟终端执行shell命令
- 使用bcryptjs对密码加密时,其校验原理是怎样的?
- java日期转换
- LintCode之Strings Homomorphism
- mysql explain使用
- 微信总部大楼设计图曝光:拟建39层大楼高度207米
- swift
- 【注意事项】c#通过CallBack获取C++传递的数据
- CCF CSP 201512-2 消除类游戏(Java-100分)
- 【NOIP2012普及组原题】寻宝