1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2017
    Messages : 7
    Points : 13
    Points
    13

    Par défaut Connexion avec mot de passe crypter en md5

    Bonjour a tous,
    j'ai une application avec lequel je me connecte grâce a une basse de donner mysql dans la quelle je renseigne un identifiant et un mot de passe crypter dans ma basse de donné
    Cryptage de mot de passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            try{
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dxca","sam","5852");
            PreparedStatement state = con.prepareStatement("insert into membres (identifiant, motdepasse, service, statut)values(?,?,?,?)");
            state.setString(1, id.getText());
            state.setString(3, service.getText());
            state.setString(4, statut.getText());        
     
            if (md5(pass.getPassword()).equals(""))
            {
                JOptionPane.showMessageDialog(this, "crypter", "erreur", JOptionPane.ERROR_MESSAGE);
                return;
            }
            //if i in table.getRow = assurance.update();return assurance();state.executeUpdate();
            state.setString(2, md5(pass.getPassword()));
            int count = state.executeUpdate();
            if (count > 0){
                JOptionPane.showMessageDialog(this, "Ajouter", "informayion", JOptionPane.INFORMATION_MESSAGE);
            ///
            }
            }catch(Exception ex){ 
                JOptionPane.showMessageDialog(this, ex.toString(), "erreur", JOptionPane.ERROR_MESSAGE);
            }
        }                                        
     
        private String md5(char[] c){
            try{
                MessageDigest digs = MessageDigest.getInstance("MD5");
                digs.update((new String(c)).getBytes("UTF8"));
                //byte byteData[] = digs.digest();
                String str = new String(digs.digest());
                return str;
            }catch (Exception ex){
                return "";
            }
     
        }
    mais quand j'essaie de me connecter il n'arrive pas a trouver le mot de passe d'origine que j'ai crypter
    authentification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
        private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {                                            
     
        }                                           
            //Button Se connecter
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            if(jTextField1.getText().length()==0)  
                JOptionPane.showMessageDialog(null, "Erreur de saisie");
            else if(jPasswordField1.getPassword().length==0)  
                JOptionPane.showMessageDialog(null, "Erreur de saisie");
            else{
                String user = jTextField1.getText();   
                char[] pass = jPasswordField1.getPassword(); 
                //String pwd = String.copyValueOf(pass);
                //String dp = 
                if (md5(jPasswordField1.getPassword()).equals(""))
                {
                JOptionPane.showMessageDialog(this, "crypter", "erreur", JOptionPane.ERROR_MESSAGE);
                return;
                }    
                String pwd = String.copyValueOf(pass);
     
                //Verification des identifiant saisie 
                if(validate_login(user,pwd)){
                    JOptionPane.showMessageDialog(null, "Connexion reussie");
                    //Java_Insert_Update_Delete_Display df = new Java_Insert_Update_Delete_Display();
                    //df.setVisible(true);
                    //this.hide();
                    FenetreDam af = new FenetreDam();
                    af.setVisible(true);
                    //Fenetre2 ft = new Fenetre2();
                    //ft.setVisible(true);
                    this.hide();
                    //TableSql af = new TableSql(); 
                    //af.setVisible(true);
                    }
                else
                    JOptionPane.showMessageDialog(null, "Connection refusé");
                }                      
        }                                        
        private String md5(char[] c){
            try{
                MessageDigest digs = MessageDigest.getInstance("MD5");
                digs.update((new String(c)).getBytes("UTF8"));
                //byte byteData[] = digs.digest();
                String str = new String(digs.digest());
                return str;
            }catch (Exception ex){
                return "";
            }
     
        }
     
     
     
        private void jPasswordField1ActionPerformed(java.awt.event.ActionEvent evt) {                                                
     
        }                                               
     
        private boolean validate_login(String identifiant,String motdepasse) {
            try{           
                Class.forName("com.mysql.jdbc.Driver");
                Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dxcare","root","");     
                PreparedStatement pst = con.prepareStatement("Select * from membres where identifiant=? and motdepasse=?");
                pst.setString(1, identifiant); 
                pst.setString(2, motdepasse);
                ResultSet rs = pst.executeQuery();                        
           if(rs.next())            
               return true;    
           else
               return false;            
            }catch(Exception e){
                e.printStackTrace();
                return false;
       }       
    }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 193
    Points : 24 434
    Points
    24 434
    Billets dans le blog
    2

    Par défaut

    Salut,

    Premièrement, il ne faut pas convertir le digest en String par String str = new String(digs.digest());. Il est possible que des octets du digest ne correspondent pas à des caractères dans l'encodage par défaut. Pour peu que tu envoies la String à une base de données et que l'encodage n'y soit pas le même que celui par défaut du client et tu n'as plus les mêmes valeurs.

    Pour avoir une chaîne de caractères, tu peux encoder en base 64 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String encoded = Base64.getEncoder().encodeToString(hash);
    Ensuite, il y'a des bases de données qui savent chiffrer en md5, donc côté serveur, cela peut être fait sans intervention de Java. Sinon tu stockes le base64 du digest.

    Enfin, il faut bien entendu comparer les "md5" entre eux. Toi tu compares le mot de passe en clair avec la valeur dans la base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char[] pass = jPasswordField1.getPassword(); 
     
                String pwd = String.copyValueOf(pass);
     
                //Verification des identifiant saisie 
                if(validate_login(user,pwd)){
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private boolean validate_login(String identifiant,String motdepasse) {
            try{           
                Class.forName("com.mysql.jdbc.Driver");
                Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dxcare","root","");     
                PreparedStatement pst = con.prepareStatement("Select * from membres where identifiant=? and motdepasse=?");
                pst.setString(1, identifiant); 
                pst.setString(2, motdepasse);
                ResultSet rs = pst.executeQuery();
    Tu peux comparer par exemple sous MySQL directement avec BASE64_ENCODE(unhex(motdepasse))=?.

    Au passage, les ressources (ni Connection, ni PreparedStatement, ni ResultSet) ne sont libérées.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Connexion avec mot de passe sur Access
    Par setinet19 dans le forum Bases de données
    Réponses: 20
    Dernier message: 25/04/2017, 18h26
  2. HttpPost et connexion avec mot de passe
    Par fabigol dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 23/10/2011, 17h48
  3. connexion avec mot de passe via MS-Dos
    Par Sheriff dans le forum Administration
    Réponses: 2
    Dernier message: 30/03/2008, 17h42
  4. [Stratégie] Connexion à MySQL avec mot de passe crypté
    Par Krishtov dans le forum Général Java
    Réponses: 5
    Dernier message: 08/03/2006, 17h27
  5. probleme de connexion à une base sql avec mot de passe
    Par cari dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 16/12/2005, 10h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo