私は、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のとあなたはおそらくドン」ので、私は塩を格納していませんよ私は間違って何をしているのですか?
解決済み - pw_hashが格納されたデータベースフィールドは80文字で、BCryptハッシュよりも20個多い。ハッシュをトリミングするか、データベースフィールドを60文字にリセットすることができました。これが他の人に役立つことを願っています – VNorman
タイトルに「解決済み」を追加するのではなく、質問を閉じるために回答を自分で作成して受け入れてください – Bergi