e-Babillard - plateforme pédagogique interactive

Ressources pédagogiques communes concernant... => JAVA => Sujet démarré par: jpdelx sur 18 Novembre 2009 à 07:26:46



Titre: [JAVA] Cryptage MD5
Posté par: jpdelx sur 18 Novembre 2009 à 07:26:46
Bonjour


  • MD5 sur Wikipédia (http://fr.wikipedia.org/wiki/MD5)

  • Java simple class to compute MD5 hash (http://www.anyexample.com/programming/java/java_simple_class_to_compute_md5_hash.xml)



Code:
//AeSimpleMD5.java
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class AeSimpleMD5 {

    private static String convertToHex(byte[] data) {
        StringBuffer buf = new StringBuffer();
        for (int i = 0; i < data.length; i++) {
            int halfbyte = (data >>> 4) & 0x0F;
            int two_halfs = 0;
            do {
                if ((0 <= halfbyte) && (halfbyte <= 9))
                    buf.append((char) ('0' + halfbyte));
                else
                    buf.append((char) ('a' + (halfbyte - 10)));
                halfbyte = data & 0x0F;
            } while(two_halfs++ < 1);
        }
        return buf.toString();
    }

    public static String MD5(String text)
    throws NoSuchAlgorithmException, UnsupportedEncodingException  {
        MessageDigest md;
        md = MessageDigest.getInstance("MD5");
        byte[] md5hash = new byte[32];
        md.update(text.getBytes("iso-8859-1"), 0, text.length());
        md5hash = md.digest();
        return convertToHex(md5hash);
    }
}


Code:
//ex01.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;

public class ex01 {

    public static void main(String[] args) throws IOException {
        BufferedReader userInput = new BufferedReader (new InputStreamReader(System.in));

        System.out.println("Enter string:");
        String rawString = userInput.readLine();

        try {
            System.out.println("MD5 hash of string: " + AeSimpleMD5.MD5(rawString));
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

@lpf

(http://jpdelx.free.fr/bas.gif)


Titre: [JAVA] Cryptage MD5
Posté par: Sébastien PICAVET sur 18 Novembre 2009 à 11:03:23
Citation de: jpdelx sur 18 Novembre 2009 à 07:26:46
Code:
int halfbyte = (data >>> 4) & 0x0F;

Qu’est-ce que fait cette ligne ?


Titre: [JAVA] Cryptage MD5
Posté par: jpdelx sur 18 Novembre 2009 à 11:13:16
Sébastien

>>> : il s'agit d'un décalage de bits à droite ! [ en savoir + (http://www.commentcamarche.net/contents/java/javaop.php3) ]  :P

& 0x0F : il s'agit d'un "ET" binaire [ en savoir + (http://forums.sun.com/thread.jspa?threadID=5241671) ]  :P x 2

Extraction des 4 bits de poids forts ?

C'est sur ce genre de "détail" qu'on s'aperçoit que la codification en Langage C sert à quelque chose ! ;)

@lpf

PS : http://en.wikipedia.org/wiki/Bitwise_operation



Titre: [JAVA] Cryptage MD5
Posté par: Sébastien PICAVET sur 18 Novembre 2009 à 11:42:43
C’est surtout le « >>> » qui me laissait perplexe. Je connaissais l’écriture hexadécimale et la comparaison bit-à-bit.

C’est sûr que l’on ne rencontre que rarement cette écriture en Java.


Titre: [JAVA] Cryptage MD5
Posté par: jpdelx sur 18 Novembre 2009 à 11:46:54
Sébastien

Cela dépend beaucoup du domaine des applications : en informatique de gestion, c'est plutôt
rare. Dans celui ( par exemple ) de la programmation des réseaux, c'est plus courant  :)

@lpf

J.Phil.


e-Babillard - plateforme pédagogique interactive | Propulsé par SMF 1.0.6 modifié par jpdelx.
© 2001-2005, Lewis Media. Tous droits réservés.