日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Security使用出现 Encoded password does not look like BCrypt异常的解决以及Spring Securit加密方式的学习

發布時間:2024/7/5 javascript 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Security使用出现 Encoded password does not look like BCrypt异常的解决以及Spring Securit加密方式的学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

QUESTION:Spring Security使用出現 Encoded password does not look like BCrypt異常的解決以及Spring Securit加密方式的學習?

目錄

QUESTION:Spring Security使用出現 Encoded password does not look like BCrypt異常的解決以及Spring Securit加密方式的學習?

ANWSER:

一:問題提出

二:解決方法:

三:Spring Securit加密方式


ANWSER:

一:問題提出

?

博主在做一個SSM整合企業權限管理系統case時,第一次使用spring security框架進行權限驗證,在經過一系列bug的修改,最后邏輯通了,卻出現?Encoded password does not look like BCrypt。查詢半天無果,特此寫下關于spring security框架的學習心得。

之所以出現以上異常,是因為版本升級5.x后,密碼格式不匹配產生。

我們可以看下拋出異常的源代碼:

package org.springframework.security.crypto.bcrypt;import java.security.SecureRandom; import java.util.regex.Pattern; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.security.crypto.password.PasswordEncoder;public class BCryptPasswordEncoder implements PasswordEncoder {private Pattern BCRYPT_PATTERN;private final Log logger;private final int strength;private final SecureRandom random;public BCryptPasswordEncoder() {this(-1);}public BCryptPasswordEncoder(int strength) {this(strength, (SecureRandom)null);}public BCryptPasswordEncoder(int strength, SecureRandom random) {this.BCRYPT_PATTERN = Pattern.compile("\\A\\$2a?\\$\\d\\d\\$[./0-9A-Za-z]{53}");this.logger = LogFactory.getLog(this.getClass());if (strength == -1 || strength >= 4 && strength <= 31) {this.strength = strength;this.random = random;} else {throw new IllegalArgumentException("Bad strength");}}public String encode(CharSequence rawPassword) {String salt;if (this.strength > 0) {if (this.random != null) {salt = BCrypt.gensalt(this.strength, this.random);} else {salt = BCrypt.gensalt(this.strength);}} else {salt = BCrypt.gensalt();}return BCrypt.hashpw(rawPassword.toString(), salt);}public boolean matches(CharSequence rawPassword, String encodedPassword) {if (encodedPassword != null && encodedPassword.length() != 0) {if (!this.BCRYPT_PATTERN.matcher(encodedPassword).matches()) {this.logger.warn("Encoded password does not look like BCrypt");return false;} else {return BCrypt.checkpw(rawPassword.toString(), encodedPassword);}} else {this.logger.warn("Empty encoded password");return false;}} } public boolean matches()方法中進行判定密碼是否匹配。

二:解決方法:

修改密碼加密的方式:

一開始我的代碼:

User user=new User(userInfo.getUsername(),"{noop}"+userInfo.getPassword(),userInfo.getStatus()==0?false:true,true,true,true,getAuthority(userInfo.getRoles()));

改變成:

BCryptPasswordEncoder bCryptPasswordEncoder=new BCryptPasswordEncoder(); // User user=new User(userInfo.getUsername(),"{noop}"+userInfo.getPassword(), getAuthority(userInfo.getRoles()));User user=new User(userInfo.getUsername(),"{noop}"+bCryptPasswordEncoder.encode(userInfo.getPassword()),userInfo.getStatus()==0?false:true,true,true,true,getAuthority(userInfo.getRoles()));

三:Spring Securit加密方式

BCrypt 算法與 MD5/SHA 算法有一個很大的區別,每次生成的 hash 值都是不同的,就可以免除存儲 salt,暴力破解起來也更困難。BCrypt 加密后的字符長度比較長,有60位,所以用戶表中密碼字段的長度,如果打算采用 BCrypt 加密存儲,字段長度不得低于 68(需要前綴 {bcrypt})。

對于Spring Security的學習,本博主后續會寫。

專欄:Spring Security

總結

以上是生活随笔為你收集整理的Spring Security使用出现 Encoded password does not look like BCrypt异常的解决以及Spring Securit加密方式的学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。