# md5 einer datei ermitteln und ausgeben



## beachdiddi (4. Mai 2007)

Hallo,

ich versuche schon den ganzen Abend den MD5 Wert einer Datei zu bekommen.
Trotz verschiedener Code-Beispiele komm ich nicht selbst drauf.
Hier mal der Code, den ich mir zusammengebaut habe.


```
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Einlesen {
	
	private static byte[] getFileBytes(final String path) throws IOException {
             File file = new File(path);
             int length = (int)file.length();
             byte[]data = new byte[length];
             FileInputStream in = new FileInputStream(file);
             int offset = 0;
             do {
                 offset += in.read(data, offset, length-offset);
             } while (offset < length);
             return data;
         }
	
	public static void main(String[] args) {
		try{
			byte[] bytes = getFileBytes("/Pfad/zum/Bild");
			MessageDigest md = MessageDigest.getInstance("MD5");
			md.update(bytes);
			md.digest();
										
		} catch (NoSuchAlgorithmException e) {
				
		} catch (IOException ex){
			
		}
		
	}
}
```

Klappt das Einlesen der Datei überhaupt?

Wie kann ich mir den md5 Wert denn ausgeben lassen. Alles Versuche mit .toString() haben nicht funktioniert.

Danke schonmal für eure Hilfe!

mfg, beachdiddi


----------



## Hilefoks (5. Mai 2007)

```
import java.math.BigInteger;
import java.security.MessageDigest;
import java.io.*;

public class Md5Sum {
        public static void main(String[] args) throws Exception {
                MessageDigest md = MessageDigest.getInstance("MD5");
                File f=new File(args[0]);
                InputStream is=new FileInputStream(f);
                byte[] buffer=new byte[8192];
                int read=0;
                while( (read = is.read(buffer)) > 0)
                        md.update(buffer, 0, read);
                byte[] md5 = md.digest();
                BigInteger bi=new BigInteger(1, md5);
                String output = bi.toString(16);
                System.out.println(output+"  "+args[0]);
        }
}
```

MfG,
Hilefoks


----------



## beachdiddi (5. Mai 2007)

Cool!
So funktionierts.

Danke!!!


----------



## beachdiddi (7. Mai 2007)

Ich hätte da noch eine Frage zu den Hashwerten.
Wie werden zwei Hashwerte denn üblicherweise verglichen?

Über das resultierende byte-array? Oder ist es ganz normal, dass zwei Werte über ihre Buchstaben-Ziffern-Folge verglichen werden?


----------



## mic_checker (7. Mai 2007)

Zu Hashfunktionen etc. allgemein: http://www.java-forum.org/de/viewtopic.php?p=106692#106692

Ansonsten : API : http://java.sun.com/j2se/1.5.0/docs/api/java/security/MessageDigest.html


----------

