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

Sécurité Java Discussion :

Calculer le MD5/SHA-256 d'un fichier


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 85
    Par défaut Calculer le MD5/SHA-256 d'un fichier
    Bonjour à tous,
    je n'arrive pas à trouver un exemple de code permettant de calculer le MD5 ou le SHA-256 d'un fichier. J'ai bien trouvé la librairie java.security.MessageDigest mais je ne vois pas comment l'utiliser dans le cadre d'un fichier... Est-ce que quelqu'un a un bout de code ou un lien pour m'aider?

    Merci et bonne journée!

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Avec ceci tu pourra obtenir le MD5 d'un String. A toi de modifier pour lire a partir d'un fichier un String ou carrement les bytes directement...

    Bonne chance.

    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
     
    public class MD5
    {
     
    	/*
    	 * Encode la chaine passé en paramètre avec l’algorithme MD5
    	 * @param key : la chaine à encoder
    	 * @return la valeur (string) hexadécimale sur 32 bits
    	 */
     
    	public static String encode(String key)
    	{
     
    		byte[] uniqueKey = key.getBytes();
    		byte[] hash = null;
     
    		try
    		{
    			// on récupère un objet qui permettra de crypter la chaine
    			hash = MessageDigest.getInstance("MD5").digest(uniqueKey);
    		}
    		catch (NoSuchAlgorithmException e)
    		{
    			throw new Error("no MD5 support in this VM");
    		}
    		StringBuffer hashString = new StringBuffer();
    		for (int i = 0; i < hash.length; ++i)
    		{
    			String hex = Integer.toHexString(hash[i]);
    			if (hex.length() == 1)
    			{
    				hashString.append("0");
    				hashString.append(hex.charAt(hex.length() - 1));
    			}
    			else
    			{
    				hashString.append(hex.substring(hex.length() - 2));
    			}
    		}
    		return hashString.toString();
    	}
     
    	// méthode principale
     
    	public static void main(String[] args)
    	{
    		System.out.println("La chaine : P@ssWord, cryptée via MD5 donne : " + MD5.encode("P@ssWord"));
    	}
     
    }
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Par ailleurs j'ai lu là:
    http://www.developpez.net/forums/d19...r-octet-octet/
    que tu n'étais pas obligé de lire le fichier entier pour le hasher (en effet si le fichier est gros genre plusieurs centaines de MO, ta RAM risque de prendre cher)

    Ils parlent d'un algo en C, mais avec un peu d'effort c'est surement transposable en java

    Good luck!

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 85
    Par défaut
    Mouais mouais... je me suis mis depuis peu au Java. Je viens du monde PHP où tout est si facile. Je pensais que Java s'en approchait du point de vue des fonctions prêtes à l'emploi, mais c'est quand même pas comparable.

    Enfin, ça fait un peu plus travailler les bases. Je suis en train de m'inspirer de l'exemple de wax78. Je vous tiens au courant quand j'ai fini...



  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 85
    Par défaut
    Ben finalement, il suffit de réfléchir un peu et de comprendre ce qui est écrit... et ça s'adapte assez bien. En fait, j'ai trouvé un autre exemple sur le net: https://svn.lal.in2p3.fr/projects/XW...putStream.java et https://svn.lal.in2p3.fr/projects/XW...ommon/MD5.java

    Voilà ce que j'en ai fait:
    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
     
    public static String strEmpreinte(String _strPath, String _strAlgo) throws Exception {
     
        byte[] abBuffer = new byte[65536];
        int iNbRead;
     
        InputStream isF = new BufferedInputStream(new FileInputStream(_strPath));
        java.security.MessageDigest ODigest = java.security.MessageDigest.getInstance(_strAlgo);
        while ((iNbRead = isF.read(abBuffer)) != -1) {
          ODigest.update(abBuffer, 0, iNbRead);
        }
     
        char[] acHexa = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',};
     
        byte[] abDigest = ODigest.digest();
        char acRetour[] = new char[abDigest.length * 2];
        for (int i = 0, x = 0; i < abDigest.length; i++) {
          acRetour[x++] = acHexa[(abDigest[i] >>> 4) & 0xf];
          acRetour[x++] = acHexa[abDigest[i] & 0xf];
        }
        return new String(acRetour);
     
    }
    Bon, c'est un peu sauvage quant à la gestion des exceptions, mais c'est à vous de voir pour rendre un peu plus clean.
    Merci à tous pour vos suggestions ... enfin, surtout Jidefix et wax78 .
    arobase plus!

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Mais de rien, si nous avons pu ne serait-ce que te diriger vers une solution, cela est parfait
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Calcul du md5 de millions de fichiers
    Par Sennad dans le forum Général Java
    Réponses: 94
    Dernier message: 18/09/2014, 17h15
  2. comment calculer le md5 du contenu d'un fichier
    Par c.plus.plus dans le forum Débuter
    Réponses: 6
    Dernier message: 01/01/2012, 17h54
  3. Hashage SHA - 256
    Par K-Kaï dans le forum Sécurité
    Réponses: 6
    Dernier message: 26/04/2010, 17h38
  4. Calculer le MD5 d'un fichier octet par octet
    Par bouazza92 dans le forum C
    Réponses: 5
    Dernier message: 09/08/2006, 20h39
  5. Réponses: 6
    Dernier message: 08/01/2006, 12h49

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