gpt4 book ai didi

java - 如何使用 jBCrypt 进行密码哈希比较?

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:20 25 4
gpt4 key购买 nike

我在使用 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 非常简单 - here

我没有存储盐,因为使用 BCrypt 你应该不必这样做 - 那么我做错了什么?

最佳答案

存储 pw_hash 的数据库字段是 80 个字符。这比 BCrypt 散列多 20 个字符。修剪散列或将数据库字段重置为 60 个字符有效。

(发布给定的答案 [查看问题的评论] 以从未回答的队列中删除问题。将近一年前用户被要求这样做但尚未这样做。这个答案的功劳是他们的)

关于java - 如何使用 jBCrypt 进行密码哈希比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9722388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com