Ceci est un exemple de programme qui renvoie la valeur de hachage d'un fichier avec java.
SampleMain.java
package test;
public class SampleMain {
	public static void main(String[] args) {
		System.out.println(SampleHash
				.getfileHash("glassfish-5.0.1.zip", SampleHash.SHA_512));
	}
}
SampleHash.java
package test;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SampleHash {
	/**Algorithme MD2*/
	public static final String MD2 = "MD2";
	/**Algorithme MD5*/
	public static final String MD5 = "MD5";
	/** SHA-1 algorithme*/
	public static final String SHA_1 = "SHA-1";
	/** SHA-256 algorithmes*/
	public static final String SHA_256 = "SHA-256";
	/** SHA-512 algorithme*/
	public static final String SHA_512 = "SHA-512";
	/**
	 *Renvoie la valeur de hachage (chaîne de caractères) du fichier
	 * @param filePath Chemin du fichier
	 * @algorithme param algorithmName
	 * @renvoie la valeur de hachage (chaîne de caractères)
	 */
	public static String getfileHash(String filePath, String algorithmName) {
		Path path = Paths.get(filePath);
		byte[] hash = null;
		//Acquisition d'algorithmes
		MessageDigest md = null;
		try {
			md = MessageDigest.getInstance(algorithmName);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		try (
				//Génération de flux d'entrée
				DigestInputStream dis = new DigestInputStream(
						new BufferedInputStream(Files.newInputStream(path)), md)) {
			//Lire le fichier
			while (dis.read() != -1) {
			}
			//Calcul de la valeur de hachage
			hash = md.digest();
		} catch (IOException e) {
			e.printStackTrace();
		}
		//Convertit la valeur de hachage (octet) en chaîne de caractères et retourne
		StringBuilder sb = new StringBuilder();
		for (byte b : hash) {
			String hex = String.format("%02x", b);
			sb.append(hex);
		}
		return sb.toString();
	}
}
J'utilise java.security.DigestInputStream et java.security.MessageDigest pour obtenir la valeur de hachage.
La valeur de hachage acquise (octet) est convertie en chaîne de caractères et renvoyée.
c'est tout
Recommended Posts