通过BCryptPasswordEncoder的加密的相同字符串的结果是不同的,如果需要判断是否是原来的密码,需要用它自带的方法。

加密:


  1. BCryptPasswordEncoder encode = new BCryptPasswordEncoder();
  2. encode.encode(password);

判断:

需要通过自带的方法 matches 将未经过加密的密码和已经过加密的密码传进去进行判断,返回布尔值。

encode.matches(oldpassword,user1.getPassword());

举例说明:


  1. public class BCryptPasswordEncoderTest {
  2. public static void main(String[] args) {
  3. String pass = "admin";
  4. BCryptPasswordEncoder bcryptPasswordEncoder = new BCryptPasswordEncoder();
  5. String hashPass = bcryptPasswordEncoder.encode(pass);
  6. System.out.println(hashPass);
  7. boolean f = bcryptPasswordEncoder.matches("admin",hashPass);
  8. System.out.println(f);
  9. }
  10. }

可以看到,每次输出的hashPass 都不一样,

但是最终的f都为 true,即匹配成功。

查看代码,可以看到,其实每次的随机盐,都保存在hashPass中。

在进行matchs进行比较时,调用BCrypt 的String hashpw(String password, String salt)

方法。两个参数即”admin“和 hashPass


  1. //******BCrypt.java******salt即取出要比较的DB中的密码*******
  2. real_salt = salt.substring(off + 3, off + 25);
  3. try {
  4. // ***************************************************
  5. passwordb = (password + (minor >= 'a' ? "\000" : "")).getBytes("UTF-8");
  6. }
  7. catch (UnsupportedEncodingException uee) {}
  8. saltb = decode_base64(real_salt, BCRYPT_SALT_LEN);
  9. B = new BCrypt();
  10. hashed = B.crypt_raw(passwordb, saltb, rounds);

假定一次hashPass为:$2a$10$AxafsyVqK51p.s9WAEYWYeIY9TKEoG83LTEOSB3KUkoLtGsBKhCwe

随机盐即为 AxafsyVqK51p.s9WAEYWYe

(salt = BCrypt.gensalt();中有描述)

可见,随机盐(AxafsyVqK51p.s9WAEYWYe),会在比较的时候,重新被取出。

即,加密的hashPass中,前部分已经包含了盐信息。

      </div>

原文地址:https://blog.csdn.net/qq_40741855/article/details/89358745

最新文章

  1. oracle:sql函数
  2. AngularJS拦截器
  3. Nhibernate基础使用教程以及简易封装
  4. 分享7款非常实用的jQuery/CSS3插件演示和源码
  5. C# 调用配置文件SQL语句 真2B!
  6. ZOJ 1243 URLs
  7. php 获取中文的拼音
  8. C++堆栈与函数调用
  9. http://www.mxchip.com/talk/news/jishuwenzhang/2014-09-11/67.html
  10. 【译】4个你需要知道的Asset Catalog的秘密
  11. Path Sum II 解答
  12. poj 3311 Hie with the Pie(状态压缩dp)
  13. java设计模式之桥接模式
  14. Android 开发笔记___Activity的生命周期
  15. Mysql ibd文件恢复指南
  16. Java SE之向上转型(动态绑定)与向下转型
  17. 64位Windows操作系统中的注冊表
  18. Mac eclipse 快捷键 f6、f8 失效
  19. WIFI_认证加密学习_STA_AP_WDS
  20. JSP用户登录页面

热门文章

  1. PHP学习(mysqli函数)
  2. if (donutString.indexOf(&quot;dozen&quot;) != -1)是什么意思
  3. Mybatis自查询递归查找子菜单
  4. objectarx之遍历当前模型空间中的所有实体,并对每个实体进行炸开
  5. 【记录bug】npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.7 (node_modules\fsvents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents1.2.7: wanted {&quot;os&quot;:&quot;darwin
  6. NS2学习笔记
  7. laravel 极验(Geetest) 让验证更安全。
  8. 笔记:html常见的兼容问题
  9. python 异常层级
  10. Oracle使用——PLSQL查询表结构并导出EXCEL