【算法】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

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

猜你喜欢

转载自blog.csdn.net/ColdFireMan/article/details/81286000