2017-10-12 2 views
0

Ich baue ein Login-System in Java mit MySQL-Datenbank, die Passwörter in der Datenbank sind verschlüsselt. Wenn ich also ein Klartext-Passwort manuell in die Datenbank einfüge, meldet sich das System an, aber es liest die verschlüsselten nicht. Ich möchte, dass mir jemand hilft.Java-Login liest keine verschlüsselten Passwörter

Hier ist, was ich versuchte:

package techtight; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.sql.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import static javax.management.Query.and; 
import javax.swing.JButton; 
import javax.swing.JFormattedTextField; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JPasswordField; 
import javax.swing.JTextField; 
public class myLogin extends JFrame { 
    public void contentMethod(){ 
    JFrame myframe = new JFrame("login Techtight"); 
    myframe.setLayout(null); 
    myframe.setSize(200,170); 

    myframe.setVisible(true); 

     JTextField txtuser = new JTextField(); 
      JPasswordField txtpass = new JPasswordField(); 
      JButton btnLoging = new JButton("Login"); 
      txtuser.setBounds(40, 20, 120, 25); 
      txtpass.setBounds(40, 50, 120, 25); 
      btnLoging.setBounds(40,80, 80, 30); 
      myframe.add(txtuser); 
      myframe.add(txtpass); 
      myframe.add(btnLoging); 
     ///How to code the button 
    btnLoging.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      // connect to the db 
      try { 
       Connection conn; 
       String dbuser = "root"; 
       String dbpassw = "12345"; 
       String databasename = "taxi"; 
       String url = "jdbc:mysql://localhost/taxi"; 
       Class.forName("com.mysql.jdbc.Driver"); 
       conn = DriverManager.getConnection(url,dbuser,dbpassw); 
       Statement st = conn.createStatement(); 
        String username = txtuser.getText(); 
        char[] pass = txtpass.getPassword(); 
        String password = new String (pass); 
        //String password = String.copyValueOf(pass); // converting from array to string 
        //String password = txtpass.getText(); 
        ResultSet rs = st.executeQuery("SELECT * FROM users where username='" + username + "' and password='" + password + "'"); 
        if(rs.next()){ 
         JOptionPane.showMessageDialog(null, "Login Succesful"); 
         myframe.dispose();// make login for disapear 

        }else { 
              JOptionPane.showMessageDialog(null, "Login Failed "); 
               new Techtight(); 


        } 
       //JOptionPane.showMessageDialog(null, "okay"); 

      } catch (SQLException ex) { 
       Logger.getLogger(myLogin.class.getName()).log(Level.SEVERE, null, ex); 
      } catch (ClassNotFoundException ex) { 
       Logger.getLogger(myLogin.class.getName()).log(Level.SEVERE, null, ex); 
      }    
     } 
});   // 

    } 
    public static void main (String args[]){ 
     myLogin m = new myLogin(); 
     m.contentMethod(); 

    } 

} 
+2

Sind Sie sicher, dass dies ein [minimales, vollständiges und überprüfbares Beispiel] (https://stackoverflow.com/help/mcve) ist? – Clijsters

+2

Wenn "Passwort" in der Datenbank verschlüsselt ist, müssen Sie das verschlüsselte "Passwort" in Ihrer Anfrage verwenden. – juvenislux

+2

@humphrey Sie würden das Passwort mit einigen Algo verschlüsseln, müssen Sie Ihr Passwort in diesem Fall auch dann verschlüsseln, dann können Sie vergleichen. –

Antwort

0

In Ihrem Programm, das Sie nicht verschlüsseltes Passwort sind vorbei. Sie wissen nicht, wie Sie Passwörter in der Datenbank verschlüsseln, aber Sie sollten nach dem hinzufügen:

String password = new String (pass); 

eine Codezeile verantwortlich für die Verschlüsselung kann wie folgt aussehen:

String encrypted_password = sha1_enc_method(password); // it could be another encryption 

und dann verschlüsselt man verwenden, anstatt auf Normal Text eins.

1

Sie müssen das verschlüsselte Passwort für Ihre Abfrage verwenden.

Sie müssen also die gleiche Verschlüsselung oder Hash-Funktion für die gespeicherten Daten verwenden.

Wenn das Passwort in der Datenbank SHA1 die Abfrage aussieht gehasht könnte wie:

SELECT * FROM users WHERE username = user AND password = SHA1(password) 

Sie Ihr Passwort, bevor es an die Datenbank zu senden auch verschlüsseln können. Verwenden Sie einfach das Java-Äquivalent der Verschlüsselungsfunktion.

+0

Ich habe MD5 mit PHP verwendet, um diese Passwörter zu erstellen – humphrey

+0

Also verwenden Sie stattdessen 'MD5 (...)' in dieser Abfrage –

Verwandte Themen