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 回答