VNo*_*man 14 java bcrypt jbcrypt
我无法使用BCrypt的checkpw(plaintextpw,previoushash)方法获取明文密码和之前的哈希值.
在寄存器servlet中,我获取输入的密码,使用BCrypt的hashpw(密码,genSalt)方法对其进行散列并将其存储在db中.
在登录servlet中,我从db中获取该哈希值,并使用BCrypt的checkpw来查看它是否与输入的密码匹配.
它从不匹配.这在我的常规Java应用程序中工作正常,而不是在webapp中.没有其他人有这个问题所以我认为我一定是做错了:
//RegisterServlet
String pw_hash = BCrypt.hashpw(request.getParameter("password"), BCrypt.gensalt());
String loginInsertString = "insert into login (loname,lopassword,locustomerid)" +
" VALUES ('" + username + "','" + pw_hash + "','" + loginInsert + "');";
//LoginServlet
ResultSet rs = stmt.executeQuery("select lopassword from login where loname = '" +
loginName + "';");
while( rs.next()){
dbhash = rs.getString(1);
}
out.println(dbhash+"<br>");
if (BCrypt.checkpw(request.getParameter("password"), dbhash)) {
out.println("It matches");
}else{
out.println("It does not match");
}
Run Code Online (Sandbox Code Playgroud)
BCrypt API非常简单 - 这里
我不存储盐,因为BCrypt你认为不需要 - 所以我做错了什么?
存储pw_hash的数据库字段为80个字符.这比BCrypt哈希值多20个字符.修剪哈希值或将数据库字段重置为60个字符.
(发布给定的答案[请参阅问题评论]从未答复的队列中删除问题.大约一年前用户被要求这样做但尚未这样做.这个答案的信用是他们的)
| 归档时间: |
|
| 查看次数: |
9489 次 |
| 最近记录: |