Outils pour utilisateurs

Outils du site


misc:md5_sha1_sum_java

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

misc:md5_sha1_sum_java [2011/10/31 15:55] (Version actuelle)
Ligne 1: Ligne 1:
 +Voilà comment vérifier l'​intégrité de fichiers en Java : 
 +<file java FileHashSum.java>​
 +import java.io.File;​
 +import java.io.FileInputStream;​
 +import java.security.DigestInputStream;​
 +import java.security.MessageDigest;​
  
 +/**
 + * Calcule et compare les empreintes MD5 et SHA-1 des fichiers.
 + *
 + * @author Mr-Hide (JB, http://​www.mrhide.fr)
 + * copyleft
 + */
 +public class FileHashSum {
 +        /**
 +         * compare le <​code>​sha1sum</​code>​ donné avec l'​empreinte du fichier local <​code>​file</​code>​.
 +         * @param file le fichier dont on doit calculer l'​empreinte sha1
 +         * @param sha1sum l'​empreinte à comparer
 +         * @return true si l'​empreinte du fichier correspond à <​code>​sha1sum</​code>​
 +         */
 +        public static boolean compareSha1sum(File file, String sha1sum) {
 +                boolean res = false;
 + if (sha1sum.equals(sha1sum(file))) {
 +                        res = true;
 +                }
 +                return res;
 +        }
 +
 +        /**
 +         * Retourne l'​empreinte sha1 de fichier <​code>​file</​code>​ ou null si le
 +         * fichier n'a pas pu être lu.
 +         * @param file le fichier dont on doit calculer l'​empreinte sha1
 +         * @return l'​empreinte sha1
 +         */
 +        public static String sha1sum(File file){
 +                String localSha1Sum = null;
 +                if (file.exists() && file.isFile() && file.canRead()){
 + try {
 + MessageDigest md = MessageDigest.getInstance("​SHA-1"​);​
 + DigestInputStream dis = new DigestInputStream(new FileInputStream(file),​ md);
 + dis.on(true);​
 +
 + while (dis.read() != -1){
 + ;
 + }
 + byte[] b = md.digest();​
 + localSha1Sum = getHexString(b);​
 + } catch (Exception ex) {
 + ex.printStackTrace();​
 + }
 + } else {
 + System.out.println("​impossible de trouver le fichier : "​+file.getAbsolutePath());​
 + }
 +                return localSha1Sum;​
 +        }
 +
 +        /**
 +         * Compare le <​code>​md5sum</​code>​ donné avec l'​empreinte du fichier local <​code>​file</​code>​.
 +         * L'​utilisation de MD5 est déconseillée ! Il existe en effet une faille de sécurité par collision sur MD5
 +         * Utilisez plutôt SHA-1.
 +         * @param file le fichier dont on doit calculer l'​empreinte md5
 +         * @param sha1sum l'​empreinte à comparer
 +         * @return true si l'​empreinte du fichier correspond à <​code>​md5sum</​code>​
 +         */
 +        public static boolean compareMd5sum(File file, String md5sum) {
 +                boolean res = false;
 + if (md5sum.equals(md5sum(file))){
 +                        res = true;
 +                }
 +                return res;
 +        }
 +
 +        /**
 +         * Retourne l'​empreinte md5 de fichier <​code>​file</​code>​ ou null si le
 +         * fichier n'a pas pu être lu.
 +         * @param file le fichier dont on doit calculer l'​empreinte md5
 +         * @return l'​empreinte md5
 +         */
 +        public static String md5sum(File file) {
 +                String localMd5Sum = null;
 +                if (file.exists() && file.isFile() && file.canRead()){
 + try {
 + MessageDigest md = MessageDigest.getInstance("​MD5"​);​
 + DigestInputStream dis = new DigestInputStream(new FileInputStream(file),​ md);
 + dis.on(true);​
 +
 + while (dis.read() != -1){
 + ;
 + }
 + byte[] b = md.digest();​
 + localMd5Sum = getHexString(b);​
 + } catch (Exception ex) {
 + ex.printStackTrace();​
 +
 + } else {
 + System.out.println("​impossible de trouver le fichier : "​+file.getAbsolutePath());​
 + }
 +                return localMd5Sum;​
 +        }
 +
 + private static String getHexString(byte[] bytes) {
 + StringBuilder sb = new StringBuilder(bytes.length*2);​
 + for (byte b : bytes) {
 +                        if (b <= 0x0F && b >= 0x00) { // On rajoute le 0 de poid fort ignoré à la conversion.
 +                                sb.append('​0'​);​
 +                        }
 + sb.append( String.format("​%x",​ b) );
 + }
 + return sb.toString();​
 + }
 +}
 +
 +</​file>​
misc/md5_sha1_sum_java.txt · Dernière modification: 2011/10/31 15:55 (modification externe)