====== Différences ====== Ci-dessous, les différences entre deux révisions de la page.
— |
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> |