【算法】bcrypt加密算法学习

应用场景

今天在看架构师的源码的时候发现了bcrypt这个加密算法,发现这个是放在权限包中,和用户的登录时密码的加密检查有关,所以查看了相关的资料了解一下这个算法。

以前自己写用户的登录时,密码的加密使用的是 salt+md5 的方式。salt是自己定制的一个规则针对不同的用户生成,如用户注册的当前时间加上指定的字符串然后进行hash生成。校验密码就是获取到用户的注册时间重新进行一边加密,检查两个加密后的字符串是否一致。

今天看资料的时候,说是 salt+md5 的方式安全级别也是不够的,通过scrypt可以增加破解难度。其实我觉得一般的场景 salt+md5 的方式也足够了。我其实是觉得这个加密包做的足够安全和傻瓜式,方便实用。

使用

  1. 导入jbcrypt包
<!-- https://mvnrepository.com/artifact/org.mindrot/jbcrypt -->
<dependency>
    <groupId>org.mindrot</groupId>
    <artifactId>jbcrypt</artifactId>
    <version>0.4</version>
</dependency>
  1. 使用主要的方法
import org.mindrot.jbcrypt.BCrypt;

public class BcryptTest {

    public static void main(String[] args) {
        //准备测试的密码
        String pwd = "test1";
        //获取salt,参数不能大于30
        String salt = BCrypt.gensalt(10);
        System.out.println("salt:" + salt);
        //经过加密后的字符串
        String hashed = BCrypt.hashpw(pwd, salt);
        System.out.println("hashed:" + hashed);
        //检查是否一致的
        System.out.println("is match:" + BCrypt.checkpw("test1", hashed));
    }

}

输出结果:

salt:$2a$10$203TpDwkZ8VzBlFYX3f0Ze
hashed:$2a$10$203TpDwkZ8VzBlFYX3f0ZeivU.eqR6AE5KcEGG2TQG.Cj30UmHGcC
is match:true

TODO

后续有深入的思考再补充吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值