javascript
Spring Security使用出现 Encoded password does not look like BCrypt异常的解决以及Spring Securit加密方式的学习
QUESTION:Spring Security使用出現(xiàn) Encoded password does not look like BCrypt異常的解決以及Spring Securit加密方式的學(xué)習(xí)?
目錄
QUESTION:Spring Security使用出現(xiàn) Encoded password does not look like BCrypt異常的解決以及Spring Securit加密方式的學(xué)習(xí)?
ANWSER:
一:問題提出
二:解決方法:
三:Spring Securit加密方式
ANWSER:
一:問題提出
?
博主在做一個(gè)SSM整合企業(yè)權(quán)限管理系統(tǒng)case時(shí),第一次使用spring security框架進(jìn)行權(quán)限驗(yàn)證,在經(jīng)過一系列bug的修改,最后邏輯通了,卻出現(xiàn)?Encoded password does not look like BCrypt。查詢半天無果,特此寫下關(guān)于spring security框架的學(xué)習(xí)心得。
之所以出現(xiàn)以上異常,是因?yàn)榘姹旧?.x后,密碼格式不匹配產(chǎn)生。
我們可以看下拋出異常的源代碼:
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()方法中進(jìn)行判定密碼是否匹配。二:解決方法:
修改密碼加密的方式:
一開始我的代碼:
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 算法有一個(gè)很大的區(qū)別,每次生成的 hash 值都是不同的,就可以免除存儲 salt,暴力破解起來也更困難。BCrypt 加密后的字符長度比較長,有60位,所以用戶表中密碼字段的長度,如果打算采用 BCrypt 加密存儲,字段長度不得低于 68(需要前綴 {bcrypt})。
對于Spring Security的學(xué)習(xí),本博主后續(xù)會寫。
專欄:Spring Security
總結(jié)
以上是生活随笔為你收集整理的Spring Security使用出现 Encoded password does not look like BCrypt异常的解决以及Spring Securit加密方式的学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文献阅读课10-Neural Relat
- 下一篇: Linux下的Tomcat服务器修改se