IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

MD5 problème de vérification


Sujet :

Langage Java

  1. #1
    Membre averti Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Points : 409
    Points
    409
    Par défaut MD5 problème de vérification
    Bonjour,

    J'essaie de faire fonctionner un petit truc:

    Etape 1 :insertion du mdp crypté dans un fichier nommé mail.bin
    Etape 2 :à l'ouverture d'une frame, un JOptionPane apparait pour demander le mdp
    Etape 3 :vérification du mdp et ouverture de la frame

    L'étape 1 et 2 fonctionnent mais pas l'étape 3

    La classe qui contient les méthode permettant de crypter/comparer.
    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
     
    class Passwd {
     
     
     
    	String fileName;
    	byte[] encodedPassword;
    	boolean bool =false;
     
    	public Passwd(String nom){
     
      		fileName = nom+".bin";
     
    	}
     
     
    	public boolean verifyPassword(String clair) {
        	     try {
    	      	     MessageDigest messageDigest = MessageDigest.getInstance("MD5");
    	      	     byte[] p = messageDigest.digest(clair.getBytes()); 
    	      	     messageDigest.isEqual(p, encodedPassword);
    	      	     bool=true;
        	     }
        	     catch (Exception exc) {
          		     exc.printStackTrace();
          		     bool= false;
        	     }
        	     return bool;
      	}
     
    	public void setPassword(String clair) {
        	     try {
          		     MessageDigest messageDigest = MessageDigest.getInstance("MD5");
          		     encodedPassword = messageDigest.digest(clair.getBytes()); 
        	     }
        	     catch (Exception exc) {
          		     exc.printStackTrace();
        	     }    
      	}
     
            public byte[] load() {
        	     try {
    			FileInputStream is = new FileInputStream(fileName);
        	  	is.read(encodedPassword);
       	   		is.close();
       	   		System.out.println("dans load, fil="+fileName);
     
        	     }
     
        	     catch(FileNotFoundException notf){
        		     encodedPassword = null;
          		     System.out.println("dans load exc, fil="+fileName);
        	     }
        	     catch(IOException ioexc){
     
        	     }
     
     
        	return encodedPassword;
      	}
     
    }
    La classe qui instancie:
    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
     
     
    Passwd pwd = new Passwd("mail");
    pwd.load();
     
     
     
    if(f.exists()==false){
     
    	JOptionPane d = new JOptionPane();
     
    	retour = d.showInputDialog(envoi_mail_IH.this,"Veuiilez entrer\n le mot de passe de messagerie","Mot de passe",JOptionPane.QUESTION_MESSAGE);
    	System.out.println("mdp tapé :"+retour);
     
     
    	if(pwd.verifyPassword(retour)==true)
    		System.out.println("bon");
    	else
    		System.out.println("mauvais");
     
     
     
     
    }
    Donc là le mdp est déjà stocké dans mail.bin, ce code permet juste "normalement" de vérifier si le code tapé est bien le même que dans le fichier bin.

    L'erreur est un "NullPointer" à la ligne :"is.read(encodedPassword);"

    Voilà, merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par nicotine002
    L'erreur est un "NullPointer" à la ligne :"is.read(encodedPassword);"
    encodedPassword n'est pas initialisé et vaut null...
    donc l'exception me semble plutôt normal : tu dois allouer ton tableau pour pouvoir écrire dedans...

    a++

  3. #3
    Membre averti Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Points : 409
    Points
    409
    Par défaut
    Ok merci, mais je l'initialise à quelle valeur car je ne connais pas d'avance la longeur

    Ou alors je met new byte[10000] mais c'est pas trés joli.

    En gros ce que je ne comprend pas c'est comment grâce à la méthode load(), je peux mettre le mdp sauvegardé dans un tableau de byte.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Points : 234
    Points
    234
    Par défaut
    Citation Envoyé par nicotine002
    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
    
    Passwd pwd = new Passwd("mail");
    pwd.setPassword("mdr");
    pwd.load();
    
    if(f.exists()==false){
    				
    	JOptionPane d = new JOptionPane();
    		
    	retour = d.showInputDialog(envoi_mail_IH.this,"Veuiilez entrer\n le mot de passe de messagerie","Mot de passe",JOptionPane.QUESTION_MESSAGE);
    	System.out.println("mdp tapé :"+retour);
    					
    					
    	if(pwd.verifyPassword(retour)==true)
    		System.out.println("bon");
    	else
    		System.out.println("mauvais");
    }

  5. #5
    Membre averti Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Points : 409
    Points
    409
    Par défaut
    oui?

  6. #6
    Membre averti Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Points : 409
    Points
    409
    Par défaut
    Le but est de comparer 2 mot de passes, l'un provenant de la réponse du JOptionPane et l'autre du fichier "mail.bin".

    A had35 : le mdp fourni par l'utilisateur(JOptionPane) passe par la méthode verifyPassword donc nul besoin de le refaire passer par setPassword, à moins d'avoir loupé quelquchose

  7. #7
    Membre habitué Avatar de faico
    Inscrit en
    Août 2005
    Messages
    242
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 242
    Points : 179
    Points
    179
    Par défaut
    Salam,
    Pour initialiser ton tableau, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                    FileInputStream is = new FileInputStream(fileName);
                    encodedPassword=new byte[is.available()];
        	  	is.read(encodedPassword);
       	   	is.close();

  8. #8
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Citation Envoyé par nicotine002
    Ok merci, mais je l'initialise à quelle valeur car je ne connais pas d'avance la longeur
    et bien tu initialises le tableau dans la méthode load. Une fois que tu as lu le mot de passe ... en utilisant une var temporaire par exemple

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Points : 234
    Points
    234
    Par défaut
    Je ne suis pas entré dans la logique de ton code, j'ai seulement essayé de me représenter ta pile d'appel et setPassword() est la seule qui initialise encodedPassword. Mais en regardant de plus près, le problème est moins léger

    Tu essayes d'utiliser la variable (non initialisée) encodedPassword comme tampon de lecture du fichier mail.bin, cela sans connaître la quantité de données à lire, donc. Tu vas être obligé de lire les octets un par un dans un tampon de taille variable comme un vecteur ou un stringbuffer. Sans oublier de le créer.

  10. #10
    Membre averti Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Points : 409
    Points
    409
    Par défaut
    Ok merci faico, ca fonctionne nickel.
    Merci également à tout le monde


    et bien tu initialises le tableau dans la méthode load. Une fois que tu as lu le mot de passe ... en utilisant une var temporaire par exemple
    C'est le fichier contenant le mot de passe qui est lu, c'est pour çà que je cherchais un moyen de connaître la taille du tableau de byte par rapport au FileInputStream et mettre le mdp transformé en tableau de byte dans encodedPassword.
    Mais bon j'ai toujours du mal à m'expliquer...pourtant je sais exactement ce que je veux

    Encore merci et certainement @tte

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

Discussions similaires

  1. Problème de vérification
    Par Strix dans le forum Langage
    Réponses: 2
    Dernier message: 21/06/2007, 16h46
  2. problème de vérification de POST
    Par teen6517 dans le forum Langage
    Réponses: 4
    Dernier message: 02/03/2007, 10h32
  3. Réponses: 4
    Dernier message: 09/01/2007, 22h28
  4. problème de vérification formulaire (non bloquante)
    Par Florent08800 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/05/2006, 12h02
  5. problème de vérification formulaire
    Par Le Rebel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/03/2006, 13h10

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