2017-03-14 1 views
1

Ich versuche mich einzuloggen, wo das eingegebene Passwort und der Benutzername mit meiner Datenbank verglichen werden und wenn beide übereinstimmen, können Sie sich anmelden. Ich habe gerade angefangen mit MySQL und BCrypt zu arbeiten. Hier ist mein Code so weit:Vergleichen Sie das eingegebene Passwort mit BCrypt hashed Passwort in der Datenbank

@FXML 
    void anmeldenButton(ActionEvent event) throws NamingException, ClassNotFoundException { 
     String myUrl = "jdbc:mysql://localhost:3306/pwmanager?verifyServerCertificate=false&useSSL=true"; 
     Connection conn = null; 
     username = tfuser1.getText().toString(); 
     try { 
      conn = DriverManager.getConnection(myUrl, "", ""); 
      query = "SELECT benutzername, passwort FROM nutzer WHERE (benutzername = ? and passwort = ?)"; 
      PreparedStatement ps = conn.prepareStatement(query); 
      ps.setString(1, username); 
      ps.setString(2, password); 
      ResultSet rs = ps.executeQuery(); 

      while (rs.isBeforeFirst()) { 
       checkUser = rs.getString(1); 
       checkPass = rs.getString(3); 

       if (BCrypt.checkpw(pf1.getText(), checkPass) && (checkUser.equals(username))) { 
        System.out.println("yay"); 
       } else { 
        System.out.println("ney"); 
       } 
      } 

      conn.close(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

Vielen Dank für Ihre Hilfe!

+0

Die Frage fehlt ...? –

+0

ahh s *** Entschuldigung! Ich bekomme kein Ergebnis! Die if-Anweisung ist nie wahr oder falsch –

+0

Sie haben eine wenn es zwei Bedingungen gibt. Ist es dir eingefallen, einen Debugger und/oder zusätzliche print-Anweisungen zu verwenden, um vielleicht alle Details zu verstehen, um zu verstehen, warum das, wenn es für seinen anderen Zweig geht? – GhostCat

Antwort

1

Ihr Code macht nicht viel Sinn.

Das eingegebene Passwort darf nicht gleich dem gespeicherten Passwort sein, da das gespeicherte Passwort verschlüsselt ist und das eingegebene Passwort nicht. So können Sie nicht

and passwort = ? 

Zweitens verwenden, Ihre Abfrage wählt nur zwei Werte, aber Sie dann verwenden

checkPass = rs.getString(3) 

Sie müssen die gespeicherten Hash-Passwort aus der Datenbank durch den Benutzernamen bekommen nur und verwenden Sie dann Bcrypt, um zu überprüfen, ob das eingegebene Passwort und das gespeicherte Hash-Passwort übereinstimmen.

Auch

while (rs.isBeforeFirst()) 

viel Sinn nicht entweder machen, und die Abfrage soll 0 oder eine Zeile zurück. Also verwenden Sie einfach

if (rs.next()) 
Verwandte Themen