0

需要帮助将文本与数据库中的 md5 进行比较,我该怎么做 ;S 所以我添加了更多代码,但它仍然没有工作,“无效的用户名/密码”。标签出现,我很困惑大声笑,请帮助:D

    User user = em.find(User.class, (int) 1);
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
    md.update(user.get(0).getStrUserPassword().getBytes());
    byte byteData[] = md.digest();

        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < byteData.length; i++) {
            sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));

            if (txtUsername.getText().equals(user.get(0).getStrUserName())
                    && txtPassword.getText().equals(sb.toString())) {
                this.dispose();
                SubMenu sm = new SubMenu();
                sm.setVisible(true);
            } else if (txtUsername.getText().trim().length() == 0) {
                lblErrorMessage.setText("Input Username.");
                txtUsername.requestFocus();
            } else if (txtPassword.getText().trim().length() == 0) {
                lblErrorMessage.setText("Input Password.");
                txtPassword.requestFocus();
            } else {
                lblErrorMessage.setText("Invalid Username/Password.");
            }
        }
    } catch (NoSuchAlgorithmException ex) {
        Logger.getLogger(LoginForm.class.getName()).log(Level.SEVERE, null, ex);
    }
4

2 回答 2

1

如果您想将输入的密码与您在数据库中的密码 md5 进行匹配,您需要先将输入的密码转换为 MD5,然后将其与您在数据库中的密码进行比较。

我想您已经知道如何将字符串转换为 MD5,因为您在将密码存储在数据库中时已经这样做了。无论如何,这里是:

MessageDigest md = MessageDigest.getInstance("MD5");
md.update(password.getBytes());
byte byteData[] = md.digest();

此外,您不需要从数据库中检索所有用户,只需获取与用户名匹配的用户即可。

于 2013-10-21T09:57:25.487 回答
1

您不应该检索所有用户,因为您知道将有一个用户对应于用户名。您可以使用 em.find(User.class,userName);

MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(text.getBytes());
        byte byteData[] = md.digest();

            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < byteData.length; i++)
                sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));


    if(txtPassword.getText().equals(sb.toString()))  //the comparison should take place like this
于 2013-10-21T10:24:16.170 回答