spring security中 BCrypt密码加密算法

  • Post author:
  • Post category:其他



任何应用考虑到安全,绝不能明文的方式保存密码。密码应该通过哈希算法进行加密。

有很多标准的算法比如


SHA


或者


MD5


,结合


salt(





)


是一个不错的选择。
spring security中有多种密码加密方式,MD5算法的Md5PasswordEncoder、SHA 算法的ShaPasswordEncoder,但由于是弱加密算法,都被弃用了。推荐使用的是BCrypt算法的BCryptPasswordEncoder。
BCryptPasswordEncoder

实现Spring





PasswordEncoder


接口使用


BCrypt




哈希方法来加密密码。

BCrypt


强哈希方法 每次加密的结果都不一样。



@SpringBootTest

class ApplicationTests {


@Autowired

private BCryptPasswordEncoder bCryptPasswordEncoder;


@Test

public void testBCryptPasswordEncoder() {


for (int i = 0; i < 10; i++) {


String password = “123456”;

String hashed = bCryptPasswordEncoder.encode(password);

System.out.println(hashed);

}

}

}


加密后的密码长度为60(所以设计数据库时得保证该字段长度不小于60)





1





工程的


pom


引入依赖

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-security</artifactId>

</dependency>





2


)添加配置类 (资源


/


工具类中提供)

我们在添加了


spring security


依赖后,所有的地址都被


spring security


所控制了,我们目

前只是需要用到


BCrypt


密码加密的部分,所以我们要添加一个配置类,配置为所有地址

都可以匿名访问。

@Configuration

@EnableWebSecurity

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


@Override

protected void configure(HttpSecurity http) throws Exception {


http.authorizeRequests()

.antMatchers(“/**”).permitAll()

.anyRequest().authenticated()

.and().csrf().disable();

}

}

(三)启动类中配置bean

@Bean

public BCryptPasswordEncoder getBcryptPasswordEncoder(){


return new BCryptPasswordEncoder();

}

(四)加密密码

// 加密密码
user.setPassword(bCryptPasswordEncoder.encode(password));



五)校验密码

// 参数一:待检验的、未加密的密码
// 参数二:从数据库中查询出的加密后密码
bCryptPasswordEncoder.matches(password, userFromDB.getPassword())

/**

*


根据手机号和密码查询用户

* @param mobile

* @param password

* @return

*/

public


User


findByMobileAndPassword


(


String


mobile


,


String


password


){

User user = userDao


.


findByMobile


(


mobile


);

if


(


user!=


null


&& encoder


.


matches


(


password


,


user


.


getPassword


())){

return


user


;

}


else


{


return


null


;

}

}



版权声明:本文为liuerchong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。