【问题标题】:How to use jBCrypt for password hash comparison?如何使用 jBCrypt 进行密码哈希比较?
【发布时间】:2012-04-01 02:49:47
【问题描述】:

我无法使用 BCrypt 的 checkpw(plaintextpw, previoushash) 方法获取明文密码和之前的哈希值。

在注册 servlet 中,我获取输入的密码,使用 BCrypt 的 hashpw(password, genSalt) 方法对其进行哈希处理并将其存储在数据库中。

在登录 servlet 中,我从数据库中获取该哈希,并使用 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");
            }

BCrypt API 非常简单 - here

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

【问题讨论】:

  • 已解决 - 存储 pw_hash 的数据库字段为 80 个字符。比 BCrypt 哈希值多 20 个字符。修剪散列或将数据库字段重置为 60 个字符。希望这对其他人有帮助。
  • 请自己创建一个答案并接受,以结束问题,而不是在标题中添加“SOLVED”

标签: java bcrypt jbcrypt


【解决方案1】:

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

(发布给定的答案 [参见 cmets on question] 以从未回答的队列中删除问题。用户在近一年前被要求这样做,但尚未这样做。这个答案的功劳是他们的)

【讨论】:

    猜你喜欢
    • 2021-09-27
    • 1970-01-01
    • 2023-03-29
    • 2019-07-02
    • 2022-01-24
    • 1970-01-01
    • 2016-09-13
    • 2019-11-11
    • 1970-01-01
    相关资源
    最近更新 更多