介绍
JBCrypt对管理密码非常方便,采用hash+salt的方式,使用密码生成salt和hash,并将salt加入到hash里面去,从而使得salt不需要单独保存,同时嫌“MD5”计算速度“太快”,从而加入了反复执行的功能,降低暴力破解的风险。
详细介绍
项目git地址:https://github.com/jeremyh/jB...
项目maven:
<!-- https://mvnrepository.com/artifact/org.mindrot/jbcrypt -->
<dependency>
<groupId>org.mindrot</groupId>
<artifactId>jbcrypt</artifactId>
<version>0.4</version>
</dependency>
重要方法
BCrypt.gensalt() : 生成salt的方法,一般不需要单独调用,和下面的方法一起使用。
BCrypt.hashpw(password, BCrypt.gensalt(4)):生成hash密码,传入用户密码和salt。虽然是在生成salt的时候传入了一个整数,单该数字只是加在了盐的前缀上,用于在计算hash的时候使用。
BCrypt.checkpw(candidate, hashed):密码验证,传入密码候选值和hash密码,返回布尔值。
应用
在之前的一些web系统中,会使用MD5+SALT的方法,每个用户的salt不同,还要单独保存。使用JBCrypt的话,salt就可以隐藏起来了,系统不需要保存salt,因为salt就保存在hash密码中了。又一个开箱即用的好工具。
其他
在JBCrypt中,使用了JDK8的SecureRandom类,关于随机数,请参考 Java中生成随机数Random、ThreadLocalRandom、SecureRandom 和 Random函数的安全性问题与SecureRandom