我是靠谱客的博主 清新宝马,最近开发中收集的这篇文章主要介绍Bcrypt密码加密,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Bcrypt密码加密

1.1 简介

任何应用考虑到安全,绝不能明文的方式保存密码。密码应该通过哈希算法进行加密。有很多标准的算法比如SHA或者MD5,结salt(盐)是一个不错的选择。 Spring Security提供了BCryptPasswordEncoder类,实现Spring的PasswordEncoder接口使用BCrypt强哈希方法来加密密码。
BCrypt强哈希方法 每次加密的结果都不一样。

(1)工程中引入依赖

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>2.2.4.RELEASE</version>
</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();
}
}

(3)修改r工程的Application, 配置bean

@Bean
public BCryptPasswordEncoder bcryptPasswordEncoder(){
return new BCryptPasswordEncoder();
}

1.2 管理员密码加密

1.2.1 新增管理员密码加密
@Autowired
BCryptPasswordEncoder encoder;
public void add(Admin admin) {
admin.setId(idWorker.nextId()+""); //主键值
//密码加密
String newpassword = encoder.encode(admin.getPassword());//加密后的密码
admin.setPassword(newpassword);
adminDao.save(admin);
}
1.2.2 管理员登陆密码校验

(1)AdminDao增加方法定义

public Admin findByLoginname(String loginname);

(2)AdminService增加方法

/**
* 根据登陆名和密码查询
* @param loginname
* @param password
* @return
*/
public Admin findByLoginnameAndPassword(String loginname, String password){
Admin admin = adminDao.findByLoginname(loginname);
if( admin!=null && encoder.matches(password,admin.getPassword()))
{
return admin;
}else{
return null;
}
}

(3)AdminController增加方法

/**
* 用户登陆
* @param loginname
* @param password
* @return
*/
@RequestMapping(value="/login",method=RequestMethod.POST)
public Result login(@RequestBody Map<String,String> loginMap){
Admin admin = adminService.findByLoginnameAndPassword(loginMap.get("loginname"),
loginMap.get("password"));
if(admin!=null){
return new Result(true,StatusCode.OK,"登陆成功");
}else{
return new Result(false,StatusCode.LOGINERROR,"用户名或密码错误");
}
}

1.3 用户密码加密

1.3.1 用户注册密码加密

(4)修改tensquare_user工程的UserService 类,引入BCryptPasswordEncoder

@Autowired
private BCryptPasswordEncoder encoder;

(5)修改tensquare_user工程的UserService 类的add方法,添加密码加密的逻辑

/**
* 增加
* @param user
* @param code
*/
public void add(User user,String code) {
........
........
........
//密码加密
String newpassword = encoder.encode(user.getPassword());//加密后的密码
user.setPassword(newpassword);
userDao.save(user);
}

(4)测试运行后,添加数据

{
"mobile": "13901238899",
"password": "123123"
}

数据库中的密码为以下形式

$2a$10$a/EYRjdKwQ6zjr0/HJ6RR.rcA1dwv1ys7Uso1xShUaBWlIWTyJl5S
1.3.2 用户登陆密码判断

(1)修改tensquare_user工程的UserDao接口,增加方法定义

/**
* 根据手机号查询用户
* @param mobile
* @return
*/
public User findByMobile(String mobile);

(2)修改tensquare_user工程的UserService 类,增加方法

/**
* 根据手机号和密码查询用户
* @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;
}
}

(4)修改tensquare_user工程的UserController类,增加login方法

/
**
* 用户登陆
* @param mobile
* @param password
* @return
*/
@RequestMapping(value="/login",method=RequestMethod.POST)
public Result login(String mobile,String password){
User user = userService.findByMobileAndPassword(mobile,password);
if(user!=null){
return new Result(true,StatusCode.OK,"登陆成功");
}else{
return new Result(false,StatusCode.LOGINERROR,"用户名或密码错误");
}
}

(4)使用刚才新增加的账号进行测试,查看返回结果

最后

以上就是清新宝马为你收集整理的Bcrypt密码加密的全部内容,希望文章能够帮你解决Bcrypt密码加密所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部