Java通过BCrypt加密过程详解
⼀、概述
在⽤户模块,对于⽤户密码的保护,通常都会进⾏加密。我们通常对密码进⾏加密,然后存放在数据库中,在⽤户进⾏登录的时候,将其输⼊的密码进⾏加密然后与数据库中存放的密⽂进⾏⽐较,以验证⽤户密码是否正确。
⽬前,MD5和BCrypt⽐较流⾏。相对来说,BCrypt⽐MD5更安全,但加密更慢。
⼆、使⽤BCrypt
⾸先,可以在官⽹中取得
然后通过Ant进⾏编译。编译之后得到jbcrypt.jar。也可以不需要进⾏编译,⽽直接使⽤源码中的java⽂件(本⾝仅⼀个⽂件)。
下⾯是官⽹的⼀个Demo。
public class BCryptDemo {
public static void main(String[] args) {
// Hash a password for the first time
String password = "testpassword";
String hashed = BCrypt.hashpw(password, salt());
System.out.println(hashed);
java源代码加密 // gensalt's log_rounds parameter determines the complexity
// the work factor is 2**log_rounds, and the default is 10
String hashed2 = BCrypt.hashpw(password, salt(12));
// Check that an unencrypted password matches one that has
// previously been hashed
String candidate = "testpassword";
//String candidate = "wrongtestpassword";
if (BCrypt.checkpw(candidate, hashed))
System.out.println("It matches");
else
System.out.println("It does not match");
}
}
在这个例⼦中,
BCrypt.hashpw(password, salt())
是核⼼。通过调⽤BCrypt类的静态⽅法hashpw对password进⾏加密。第⼆个参数就是我们平时所说的加盐。
BCrypt.checkpw(candidate, hashed)
该⽅法就是对⽤户后来输⼊的密码进⾏⽐较。如果能够匹配,返回true。
三、加盐
如果两个⼈或多个⼈的密码相同,加密后保存会得到相同的结果。破⼀个就可以破⼀⽚的密码。如果名为A的⽤户可以查看数据库,那么他可以观察到⾃⼰的密码和别⼈的密码加密后的结果都是⼀样,那么,别⼈⽤的和⾃⼰就是同⼀个密码,这样,就可以利⽤别⼈的⾝份登录了。
其实只要稍微混淆⼀下就能防范住了,这在加密术语中称为“加盐”。具体来说就是在原有材料(⽤户⾃定义密码)中加⼊其它成分(⼀般是⽤户⾃有且不变的因素),以此来增加系统复杂度。当这种盐和⽤户密码相结合后,再通过摘要处理,就能得到隐蔽性更强的摘要值。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论