2012-03-15 33 views
14

私は、BCryptのcheckpw(plaintextpw、previoushash)メソッドを使用して一致させるために、プレーンテキストのパスワードと以前のハッシュを取得することに問題があります。パスワードハッシュ比較にjBCryptを使用するには?

登録サーブレットでは、入力したパスワードを取得し、BCryptのhashpw(password、genSalt)メソッドを使用してハッシュし、dbに格納します。

ログインサーブレットでは、そのハッシュを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"); 
      } 

bcryptのAPIは非常に簡単です - here

bcryptのとあなたはおそらくドン」ので、私は塩を格納していませんよ私は間違って何をしているのですか?

+3

解決済み - pw_hashが格納されたデータベースフィールドは80文字で、BCryptハッシュよりも20個多い。ハッシュをトリミングするか、データベースフィールドを60文字にリセットすることができました。これが他の人に役立つことを願っています – VNorman

+28

タイトルに「解決済み」を追加するのではなく、質問を閉じるために回答を自分で作成して受け入れてください – Bergi

答えて

9

pw_hashが格納されたデータベースフィールドは80文字でした。これはBCryptハッシュよりも20文字多いです。ハッシュをトリミングするか、データベースフィールドを60文字にリセットしました。

(与えられた答えを投稿未回答キューから質問を削除するには、[質問のコメントを参照]。ユーザーはこれを行うには、ほぼ一年前に頼まれたが、まだ行っていません。この回答のためのクレジットが彼らである)

関連する問題