本文主要介绍了通过BCrypt对Java的加密过程的详细讲解,并且通过示例代码非常详细,对于大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。
一、概述
在用户模块中,用户密码的保护通常是加密的。我们通常会对密码进行加密,并将其存储在数据库中。当用户登录时,他们对自己的密码进行加密,并与存储在数据库中的密文进行比较,以验证用户的密码是否正确。
目前比较流行的是MD5和BCrypt。相对而言,BCrypt比MD5更安全,但加密速度较慢。
二、使用BCrypt
第一,可以在官网获取源代码。
然后通过Ant编译。然后编译得到jbcrypt.jar.也可以不编译直接使用源代码中的java文件(只有一个文件本身)。
以下是来自官网的演示。
公共类BCryptDemo {
公共静态void main(String[] args) {
//第一次哈希密码
String password=' testpassword
string hashed=bcrypt . hashpw(password,bcrypt . gensalt());
system . out . println(hashed);
//gensalt的log_rounds参数决定复杂度
//工作因子为2**log_rounds,默认值为10
string hashed 2=bcrypt . hashpw(password,bcrypt . gen salt(12));
//检查未加密的密码是否与已加密的密码匹配
//之前已经过哈希处理
string candidate=' test password ';
//String candidate=' wrongtestpassword ';
if (BCrypt.checkpw(候选,哈希))
System.out.println('它匹配');
其他
System.out.println('它不匹配');
}
}
在这个例子中,
BCrypt.hashpw(密码,BCrypt.gensalt())
是核心。通过调用BCrypt类的静态方法hashpw来加密密码。第二个参数就是我们通常所说的加盐。
BCrypt.checkpw(候选,哈希)
方法是比较用户后来输入的密码。如果匹配,则返回true。
三、加盐
如果两个或两个以上的人的密码相同,加密保存会得到相同的结果。可以通过破解来破解的密码。如果名为A的用户可以查看数据库,那么他可以观察到他的密码与其他人的密码相同。然后,别人用和自己一样的密码,让他用别人的身份登录。
其实可以通过一点混淆来防止,用加密术语来说就是“加盐”。具体来说,就是在原始资料(自定义密码)中加入其他成分(一般是用户自己的、不可改变的因素),增加系统的复杂度。当这个盐和用户密码结合在一起,然后对摘要进行处理,就可以得到更隐蔽的摘要值。
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。