BCrypt の checkpw(plaintextpw, previoushash) メソッドを使用して、平文パスワードと一致する以前のハッシュを取得するのに問題があります。
登録サーブレットでは、入力したパスワードを取得し、BCrypt の hashpw(password, genSalt) メソッドを使用してハッシュし、データベースに保存します。
ログイン サーブレットでは、データベースからそのハッシュを取得し、BCrypt の checkpw を使用して、入力したパスワードと一致するかどうかを確認します。
決して一致しません。これは、webapp ではなく、通常の Java アプリでは正常に機能します。他の誰もこの問題を抱えていないので、私は間違ったことをしているに違いないと思います:
//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を使用するとおそらく必要ないため、塩を保存していません-では、何が間違っているのでしょうか?