我无法使用 BCrypt 的 checkpw(plaintextpw, previoushash) 方法获取明文密码和以前的哈希值来匹配。
在注册 servlet 中,我获取输入的密码,使用 BCrypt 的 hashpw(password, genSalt) 方法对其进行哈希处理并将其存储在数据库中。
在登录 servlet 中,我从数据库中获取该哈希,并使用 BCrypt 的 checkpw 来查看它是否与输入的密码匹配。
它永远不会匹配。这在我的常规 Java 应用程序中运行良好,只是在 web 应用程序中不行。没有其他人有这个问题,所以我想我一定做错了:
//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");
}
BCrypt API 非常简单 -这里
我没有存储盐,因为使用 BCrypt 你应该不必存储 - 那我做错了什么?