赞
踩
今天在看架构师的源码的时候发现了bcrypt这个加密算法,发现这个是放在权限包中,和用户的登录时密码的加密检查有关,所以查看了相关的资料了解一下这个算法。
以前自己写用户的登录时,密码的加密使用的是 salt+md5 的方式。salt是自己定制的一个规则针对不同的用户生成,如用户注册的当前时间加上指定的字符串然后进行hash生成。校验密码就是获取到用户的注册时间重新进行一边加密,检查两个加密后的字符串是否一致。
今天看资料的时候,说是 salt+md5 的方式安全级别也是不够的,通过scrypt可以增加破解难度。其实我觉得一般的场景 salt+md5 的方式也足够了。我其实是觉得这个加密包做的足够安全和傻瓜式,方便实用。
<!-- https://mvnrepository.com/artifact/org.mindrot/jbcrypt -->
<dependency>
<groupId>org.mindrot</groupId>
<artifactId>jbcrypt</artifactId>
<version>0.4</version>
</dependency>
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
后续有深入的思考再补充吧
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。