1. //
  2. // Source code recreated from a .class file by IntelliJ IDEA
  3. // (powered by Fernflower decompiler)
  4. //
  5.  
  6. package org.springframework.security.crypto.bcrypt;
  7.  
  8. import java.security.SecureRandom;
  9. import java.util.regex.Pattern;
  10. import org.apache.commons.logging.Log;
  11. import org.apache.commons.logging.LogFactory;
  12. import org.springframework.security.crypto.password.PasswordEncoder;
  13.  
  14. public class BCryptPasswordEncoder implements PasswordEncoder {
  15. private Pattern BCRYPT_PATTERN;
  16. private final Log logger;
  17. private final int strength;
  18. private final SecureRandom random;
  19.  
  20. public BCryptPasswordEncoder() {
  21. this(-1);
  22. }
  23.  
  24. public BCryptPasswordEncoder(int strength) {
  25. this(strength, (SecureRandom)null);
  26. }
  27.  
  28. public BCryptPasswordEncoder(int strength, SecureRandom random) {
  29. this.BCRYPT_PATTERN = Pattern.compile("\\A\\$2a?\\$\\d\\d\\$[./0-9A-Za-z]{53}");
  30. this.logger = LogFactory.getLog(this.getClass());
  31. if (strength == -1 || strength >= 4 && strength <= 31) {
  32. this.strength = strength;
  33. this.random = random;
  34. } else {
  35. throw new IllegalArgumentException("Bad strength");
  36. }
  37. }
  38.  
  39. public String encode(CharSequence rawPassword) {
  40. String salt;
  41. if (this.strength > 0) {
  42. if (this.random != null) {
  43. salt = BCrypt.gensalt(this.strength, this.random);
  44. } else {
  45. salt = BCrypt.gensalt(this.strength);
  46. }
  47. } else {
  48. salt = BCrypt.gensalt();
  49. }
  50.  
  51. return BCrypt.hashpw(rawPassword.toString(), salt);
  52. }
  53.  
  54. public boolean matches(CharSequence rawPassword, String encodedPassword) {
  55. if (encodedPassword != null && encodedPassword.length() != 0) {
  56. if (!this.BCRYPT_PATTERN.matcher(encodedPassword).matches()) {
  57. this.logger.warn("Encoded password does not look like BCrypt");
  58. return false;
  59. } else {
  60. return BCrypt.checkpw(rawPassword.toString(), encodedPassword);
  61. }
  62. } else {
  63. this.logger.warn("Empty encoded password");
  64. return false;
  65. }
  66. }
  67. }

  

Spring Security 中的加密BCryptPasswordEncoder的更多相关文章

  1. 浅谈使用spring security中的BCryptPasswordEncoder方法对密码进行加密与密码匹配

    浅谈使用springsecurity中的BCryptPasswordEncoder方法对密码进行加密(encode)与密码匹配(matches) spring security中的BCryptPass ...

  2. Spring Security 中的 Bcrypt

    最近在写用户管理相关的微服务,其中比较重要的问题是如何保存用户的密码,加盐哈希是一种常见的做法.知乎上有个问题大家可以先读一下: 加盐密码保存的最通用方法是? 对于每个用户的密码,都应该使用独一无二的 ...

  3. 六:Spring Security 中使用 JWT

    Spring Security 中使用 JWT 1.无状态登录 1.1 什么是有状态? 1.2 什么是无状态 1.3 如何实现无状态 2.JWT 2.1 JWT数据格式 2.2 JWT交互流程 2.3 ...

  4. [收藏]Spring Security中的ACL

    ACL即访问控制列表(Access Controller List),它是用来做细粒度权限控制所用的一种权限模型.对ACL最简单的描述就是两个业务员,每个人只能查看操作自己签的合同,而不能看到对方的合 ...

  5. Spring Security中html页面设置hasRole无效的问题

    Spring Security中html页面设置hasRole无效的问题 一.前言 学了几天的spring Security,偶然发现的hasRole和hasAnyAuthority的区别.当然,可能 ...

  6. Spring Security 中的过滤器

    本文基于 spring-security-core-5.1.1 和 tomcat-embed-core-9.0.12. Spring Security 的本质是一个过滤器链(filter chain) ...

  7. 看源码,重新审视Spring Security中的角色(roles)是怎么回事

    在网上看见不少的博客.技术文章,发现大家对于Spring Security中的角色(roles)存在较大的误解,最大的误解就是没有搞清楚其中角色和权限的差别(好多人在学习Spring Security ...

  8. 五:Spring Security 中的角色继承问题

    Spring Security 中的角色继承问题 以前的写法 现在的写法 源码分析 SpringSecurity 在角色继承上有两种不同的写法,在 Spring Boot2.0.8(对应 Spring ...

  9. Spring Security中实现微信网页授权

    微信公众号提供了微信支付.微信优惠券.微信H5红包.微信红包封面等等促销工具来帮助我们的应用拉新保活.但是这些福利要想正确地发放到用户的手里就必须拿到用户特定的(微信应用)微信标识openid甚至是用 ...

随机推荐

  1. 每日linux命令学习-grep模式检索

    grep模式检索指令包括grep,egrep,和fgrep,.Linux系统使用正则表达式优化文本检索,所以在此,笔者首先学习了一下正则表达式. 1. 正则表达式 正则表达式使用被称为元字符(Meta ...

  2. linux shell习题

    课件地址:https://wenku.baidu.com/view/bac2ff10f18583d0496459f3.html 1.测试环境变量:HOME,PWD,IFS等2.测试位置变量:$$,$# ...

  3. Java笔记 #03# HtmlUnit爬虫

    存档留用 (= 存档留着备用) 爬的是一个开放的自动回复机器人 API 网站 http://i.itpk.cn/. 结构 大致如下: 我做的事情就是[输入文字,点击按钮,爬取内容],如上图所示. pa ...

  4. kivy 笔记

    没有引入App对象,就不会得到一个窗口. kvlanguage用来构建UI界面,这个文件保存成”.kv”. kivy用widget来描述UI元素,lable.layout等都是widget 简单一点的 ...

  5. php 接收blob数据流,base64数据流 转为 blob二进制数据流

    php正常接收参数的方式如下:$_GET$_POST$_REQUEST 但是如果跨语言接收请求参数的话,可能会出现一系列的问题,其他语言的http请求可能是基于数据流的概念来传递参数的,如果按照常规处 ...

  6. Spring Maven 包的依赖

    <properties> <spring.version>4.3.11.RELEASE</spring.version> </properties> & ...

  7. ssh-keygen 命令

    功能 生成.管理和转换认证密钥,包括 RSA 和 DSA 两种密钥,密钥类型可以用 -t 选项指定.如果没有指定则默认生成用于SSH-2的RSA密钥,系统管理员还可以用它产生主机密钥. 通常,这个程序 ...

  8. linux上的文件服务

    主要的文件服务vsftp.Samba.NFS对比 服务器名称 用户客户端平台 使用范围 服务端口 VSFTP Windows/linux/unix/macOS等 发布网站,文件共享 Tcp/21 Sa ...

  9. opencv学习之路(6)、鼠标截图,滑动条播放视频

    一.鼠标截图 #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using namespa ...

  10. 如何使用AsyncTask

    1 如何使用handler,安卓规定只能再UI线程里面刷新UI,但是不能再UI线程里面执行耗时操作.所以我们要把耗时操作放在子线程里,然后把要刷新UI的操作传递到handler里面,然后在由Handl ...