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

ユーザー名に対応するユーザーが 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 に答える