BCrypt密码加密

BCrypt快速入门

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

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

(1)新建测试类,main方法中编写代码,实现对密码的加密

public class TestBcrypt {

    public static void main(String[] args) {
        /**
         * 得到盐
         * 盐是一个随机生成的含有29个字符的字符串,并且会与密码一起合并进行最终的密文生成
         * 并且每一次生成的盐的值都是不同的
         */
        for(int i=0;i<10;i++){
            String gensalt = BCrypt.gensalt();
            System.out.println("salt:"+gensalt);
            String saltPassword = BCrypt.hashpw("123456", gensalt);
            System.out.println("本次生成的密码:"+saltPassword);
        }
    }
}

(2)main方法中编写代码,实现对密码的校验。BCrypt不支持反运算,只支持密码校验。

//校验密码
boolean checkpw = BCrypt.checkpw("123456", saltPassword);
System.out.println("密码校验结果:"+checkpw);

结果:每次盐不一样,加密后不一样,但都能验证。

新增管理员密码加密-掌握

需求与表结构分析

changgou_system下tb_admin新增管理员,使用BCrypt进行密码加密

idint主键id
login_namevarchar登录名
passwordvarchar密码
statuschar状态

代码实现

(1)修改changgou_service_system项目的AdminServiceImpl

	@Override
    public void add(Admin admin){
        //获取盐
        String gensalt = BCrypt.gensalt();
        //对用户的密码进行加密
        String hashpw = BCrypt.hashpw(admin.getPassword(), gensalt);
        admin.setPassword(hashpw);
        adminMapper.insert(admin);
    }

测试:postman http://localhost:9101/system/admin

{
	"loginName":"test1",
	"password":"123456",
	"status":"1"
}

管理员登录密码验证java

需求分析

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

思路:

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

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

代码实现

(1)AdminService新增方法定义

    /**
     * 登录验证密码
     * @param admin
     * @return
     */
    boolean login(Admin admin);

(2)AdminServiceImpl实现此方法

    @Override
    public boolean login(Admin admin) {
        //根据登录名查询管理员
        Admin admin1=new Admin();
        admin1.setLoginName(admin.getLoginName());
        admin1.setStatus("1");
        Admin admin2 = adminMapper.selectOne(admin1);//数据库查询出的对象
        if(admin2==null){
            return false;
        }else{
            //验证密码, Bcrypt为spring的包, 第一个参数为明文密码, 第二个参数为密文密码
            return BCrypt.checkpw(admin.getPassword(),admin2.getPassword());
        }
    }

(3)AdminController新增方法

    /**
     * 登录
     * @param admin
     * @return
     */
    @PostMapping("/login")
    public Result login(@RequestBody Admin admin){
        boolean login = adminService.login(admin);
        if(login){
            return new Result();
        }else{
            return new Result(false,StatusCode.LOGINERROR,"用户名或密码错误");
        }
    }

测试:postman http://localhost:9101/system/admin/login

{
	"loginName":"test1",
	"password":"1234561"
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值