BCrypt

一、BCrypt密码加密

1 BCrypt快速入门

在用户模块,对于用户密码的保护,通常都会进行加密。我们通常对密码进行加密,然后存放在数据库中,在用户进行登录的时候,将其输入的密码进行加密然后与数据库中存放的密文进行比较,以验证用户密码是否正确。 目前,MD5和BCrypt比较流行。相对来说,BCrypt比MD5更安全。

BCrypt 官网http://www.mindrot.org/projects/jBCrypt/

  • 我们从官网下载源码
  • 新建工程,将源码类BCrypt拷贝到工程
  • 新建测试类,main方法中编写代码,实现对密码进行加密
public class main {
    public static void main(String[] args) {
        String gensalt = BCrypt.gensalt();//这个是盐  29个字符,随机生成
        System.out.println(gensalt);
        String password = BCrypt.hashpw("123456", gensalt);  //根据盐对密码进行加密
        System.out.println(password);//加密后的字符串前29位就是盐
    }
}

//运行结果:
$2a$10$kr7tZIJnNokedSC789pGPe
$2a$10$kr7tZIJnNokedSC789pGPebrEbXwgcosivxnsnH27ZnJU0fWtTVj.
  • 新建测试类,实现对密码的校验。BCrypt不支持反运算,只支持密码校验。
public class Test {
    public static void main(String[] args) {
        boolean checkpw = BCrypt.checkpw("123456",
                "$2a$10$kr7tZIJnNokedSC789pGPebrEbXwgcosivxnsnH27ZnJU0fWtTVj.");
        System.out.println(checkpw);

    }
}

//运行结果:
true

2 新增管理员密码加密

@PostMapping("/insert")
    public String insert(@RequestBody User user){
        String password = BCrypt.hashpw(user.getPassword(), BCrypt.gensalt());
        redisTemplate.opsForValue().set(user.getUsername(),password);
        return "创建用户成功";
    }

3 管理员登录密码验证

需求分析

系统管理用户需要管理后台,需要先输入用户名和密码进行登录,才能进入管理后台。

思路:

用户发送请求,输入用户名和密码

后台管理微服务controller接收参数,验证用户名和密码是否正确,如果正确则返回用户登录成功结果

@PostMapping("/login")
    public String login(@RequestBody User user){
        //在redis中根据用户名查找密码
        String password = redisTemplate.opsForValue().get(user.getUsername());
        System.out.println(password);
        boolean checkResult = BCrypt.checkpw(user.getPassword(), password);
        if (checkResult){
            return "登录成功";
        }else {
            return "登录失败";
        }
    }

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