Hashwert einer Datei berechnen

Allrounder93

Aktives Mitglied
Moin,

ich möchte überprüfen, ob meine Datei verändert wurde... Dies soll nicht anhand des Meta-Wertes "lastChange" bestimmt werden sondern über den Hashwert der Datei...
Falls dies eine Rolle spielt, ich möchte an die Datei nur Meta-Werte hinzu bzw. bearbeiten und im Verzeichnis verschieben können... ohne Auswirkung auf die Datei bzw den Hashwert.
Bearbeitet werden mehrere Zehntausenden Files


Dazu habe ich natürlich Google befragt und einiges gefunden, doch ich werde mich der Unterschiede zur Lösung nicht bewust...

Ich habe hier im Forum eine interessante Lösung gefunden. http://www.java-forum.org/spezialthemen/16968-hashfunktionen-java-messagedigest.html
Jedoch verstehe ich nicht, wie ich ein File übergeben soll und als Rückwert den Hash-Wert bekomme :rtfm:

Gruß Chirs
 
Zuletzt bearbeitet:
Sorry hab die Lösung

Java:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.IOException;
import java.math.BigInteger;

public class MD5Calc {
	public static void main(String[] args) throws NoSuchAlgorithmException, FileNotFoundException {
		MessageDigest digest = MessageDigest.getInstance("MD5");
		File f = new File("c://setup.log");
		InputStream is = new FileInputStream(f);				
		byte[] buffer = new byte[8192];
		int read = 0;
		try {
			while( (read = is.read(buffer)) > 0) {
				digest.update(buffer, 0, read);
			}		
			byte[] md5sum = digest.digest();
			BigInteger bigInt = new BigInteger(1, md5sum);
			String output = bigInt.toString(16);
			System.out.println("MD5: " + output);
		}
		catch(IOException e) {
			throw new RuntimeException("Unable to process file for MD5", e);
		}
		finally {
			try {
				is.close();
			}
			catch(IOException e) {
				throw new RuntimeException("Unable to close input stream for MD5 calculation", e);
			}
		}		
	}
}
Quelle: http://www.javalobby.org/java/forums/t84420.html
 
Ich habe das ganze verkleinert... Jedoch frage ich mich, kann ich das ganze "FileNotFoundException" "NoSuchAlgorithmException" "IOException" vorher abfangen bzw. dann einfach die Methode beenden?

Java:
	@SuppressWarnings("resource")
	public static String Hash(String FilePath){						//www.javalobby.org/java/forums/t84420.html
		File f = new File(FilePath);
		byte[] buffer = new byte[8192];
		int read = 0;
		
		InputStream is = null;
		try {is = new FileInputStream(f);} catch (FileNotFoundException e1) {}
		MessageDigest digest = null;
		try {digest = MessageDigest.getInstance("MD5");} catch (NoSuchAlgorithmException e1) {}
		
			try {
				while( (read = is.read(buffer)) > 0) {
					digest.update(buffer, 0, read);
				}
			} catch (IOException e) {e.printStackTrace();}		
			
			byte[] md5sum = digest.digest();
			BigInteger bigInt = new BigInteger(1, md5sum);
			return bigInt.toString(16);
		}
 
Zuletzt bearbeitet:

Zurück
Oben