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

Java ME Discussion :

Problème de digest en SHA1 sur java 1.6


Sujet :

Java ME

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut Problème de digest en SHA1 sur java 1.6
    Bonjour,

    Je suis débutante en Java. Je dois crypter un mot de passe en SHA1 sur ma version Java 1.6.

    J'ai trouvé une fonction sympa qui doit crypter mon mot de passe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import java.security.MessageDigest;
     
     public byte[] getHash(String password) throws NoSuchAlgorithmException {
           MessageDigest digest = MessageDigest.getInstance("SHA-1");
           digest.reset();
           byte[] input = digest.digest(password.getBytes());
     }
    Le problème c'est que j'ai une erreure sur la méthode digest. Le programme me dit qu'il doit avoir 3 arguments et moi je n'en ai qu'un seul.

    Comment cela se fait-il? Est ce que c'est ma version 1.6 de Java qui fait que ca ne marche pas?

    Merci à tous ceux qui se pencheront sur mon cas...

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    J'ai testé ce code avec Java 6 et je n'ai aucune erreur.
    Il existe bien une métode digest() n'attendant qu'un tableau de byte en paramètre.

    Peux tu poster le message d'erreur complet ?
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut
    Le message d'erreur est le suivant:

    The method digest(byte[], int, int) in the type MessageDigest is not applicable for the arguments (byte[])

    C'est bizare il connaît la fonction avec 3 arguments mais pas celle que j'utilise avec 1 seul argument.

    Je tiens à préciser que je travail sur un projet sur eclipse en J2ME avec la version Java 1.6 (peut être que ca a un rapport, peut être pas...)

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par Gwendoline
    Je tiens à préciser que je travail sur un projet sur eclipse en J2ME avec la version Java 1.6 (peut être que ca a un rapport, peut être pas...)
    En effet, pour J2ME la classe MessageDigest ne possède qu'une seule méthode digest() qui attend 3 paramètres.


    PS : je déplace le sujet vers le forum J2ME
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut
    Merci beaucoup!

    Je sais maintenant d'ou vient le problème!

    Et je me pose alors une autre question! Quelqu'un connaît-il une fonction de cryptage sha1 similaire fonctionnant en J2ME?

    Merci pour vos réponses.

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Ce code devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    byte[] input = password.getBytes();
    MessageDigest digest = MessageDigest.getInstance("SHA-1");
    digest.update(input, 0, input.length);
    int hashLength = 20; // SHA-1 donne un hash de longueur 20
    byte[] hash = new byte[hashLenth]; 
    digest.digest(hash, 0, hashLenth);
    return hash;
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut
    J'ai testé ce code:

    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
    // fonction de cryptage
    	public String getHash(String password) throws NoSuchAlgorithmException {
    		byte[] input = password.getBytes();
    		MessageDigest digest = MessageDigest.getInstance("SHA-1");
    		digest.update(input, 0, input.length);
    		int hashLength = 20; // SHA-1 donne un hash de longueur 20
    		byte[] hash = new byte[hashLength];
    		try {
    			digest.digest(hash, 0, hashLength);
    		} catch (DigestException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return new String(hash);
    	}
    Mais lorsque je lui demande de m'afficher la chaine de caractère. Voila ce que j'obtiens: üçÛd1ùl$LÊï,ì
    au lieu de: fcc7db643101f90414491c244cca06cfb811ec1a

    D'ou peut venir ce problème s'il vous plaît?

  8. #8
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    C'est normal. Tu veux afficher la valeur de chaque octet du hash or ce n'est pas ce que fait le constructeur de la classe String que tu utilise.

    Voici une méthode (que j'avais écrite il y a quelques temps) qui fait ce que tu veux à savoir transformé un hash sous forme d'un byte[] en String représentant ce hash.
    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
    /** 
    * Returns the specified bytes array hash as a String 
    * @param hash the hash as a bytes array 
    * @return the hash as a String 
    */  
    public String hashToString(byte[] hash) {  
        StringBuilder sb = new StringBuilder(); 
        for (int i = 0; i < hash.length; i++) {  
            int v = hash[i] & 0xFF; 
            if(v < 16) {
                sb.append("0"); 
            }
            sb.append(Integer.toString(v, 16)); 
        }  
        return sb.toString(); 
    }
    Par contre je ne sais pas si la classe StringBuilder est disponible avec JavaME, si non tu peux utiliser la classe StringBuffer à la place (à condition qu'elle soit disponible avec JavaME bien entendu).
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 8
    Par défaut
    MERCI !!!

    C'est super! Ca marche parfaitement!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/11/2014, 02h27
  2. Réponses: 6
    Dernier message: 24/03/2009, 16h17
  3. Réponses: 7
    Dernier message: 26/07/2007, 10h10
  4. Quel est votre livre préféré sur Java ?
    Par Ricky81 dans le forum Général Java
    Réponses: 138
    Dernier message: 25/11/2006, 03h42
  5. Réponses: 5
    Dernier message: 27/08/2003, 11h45

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