1

ユーザー名、パスワード、IDが必要なログインシステムがあります。データベース内のパスワードはMD5形式で暗号化されています。私のテストパスワードはtest1、暗号化後は5a105e8b9d40e1329780です。ログイン画面のユーザーはtest1、パスワードとして入力し、システムへのアクセスを許可する必要があります。ポップアウトメッセージを受け取り続けます。

私のSQLクエリは次のようになります。

String SQL = "SELECT login_judge.username, login_judge.password ,criminalrecords.ID FROM login_judge, criminalrecords "
           + "WHERE username = ? and password = md5(?) and ID = ?";
pst = conn.prepareStatement(SQL);
pst.setString(1, usernameF.getText());
pst.setString(2, passwordF.getText());
pst.setString(3, caseNoF.getText());

rs = pst.executeQuery();
if(rs.next())
{
    // rest of code
}
else
{
   // joption pane displaying info that something is wrong.
}

phpMyadminから

UPDATE  `w1283057`.`login_judge` SET  `password` = MD5(  'test1' ) WHERE  `login_judge`.`username` =  'test1';
4

1 に答える 1

4

パスワードフィールドがMD5ハッシュに対して短すぎます。少なくとも32文字のスペースが必要ですが、最大20文字で定義したようです。

md5(test1)からの出力をテーブルからの値と比較します。

5a105e8b9d40e1329780d62ea2265d8a
5a105e8b9d40e1329780

ハッシュが等しくないため、ログインは拒否されます。

列定義を変更できない場合は、次のsubstring関数を使用してハッシュを切り取ることができます。

       + "WHERE username = ? and password = substr(md5(?), 1, 20) and ID = ?";
于 2013-03-22T16:16:57.643 に答える