Klassen MessageDigest

Enigma228

Bekanntes Mitglied
Hi Leute!!

Ich wollte den MD5 code einer Datei bekommen..

leider bekomme ich immer diesselbe Ausgabe egal welche Datei ich nehme..
Was mache ich verkehrt?

Zur Ergänzung:
der Code soll der neue Name der Datei werden..

Java:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.security.MessageDigest;


public class Main3 {

	public static void main(String[] args) {
		MessageDigest md;
		try {
			md = MessageDigest.getInstance("MD5");
		
		    BufferedInputStream in = new BufferedInputStream(new FileInputStream("src/Smile1.jpg"));
	
		    int theByte = 0;
		    while ((theByte = in.read()) != -1) {
		      md.update((byte) theByte);
		    }
		    in.close();
	
		    byte[] theDigest = md.digest();
		    System.out.println(theDigest);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
 
Zuletzt bearbeitet:
Einfach was anderes ausgeben anstatt immer das Gleiche?!

Dein Array#toString gibt die Klasse + Hashcode zurück. Probiers doch mal mit Arrays.toString(byte[]);
 
Darf ich dir einen Tipp geben?
Java:
while ((theByte = in.read()) != -1) {
  md.update((byte) theByte);
}
Damit tust du dir keinen Gefallen - gerade in komplexeren Programmen oder wenn die Klammern komplexer werden.

Java:
theByte = in.read();
while (theByte != -1) {
  md.update((byte) theByte);
  theByte = in.read();
}
Schau mal wie schön das aussieht - in jeder Zeile eine Anweisung. Nicht zwei 😉
Ich weiß - eine Zeile taucht jetzt doppelt auf. Aber wenn man das konsequent so macht, schleichen sich auch keine Fehler ein, wenn man den Code ändert (wo die Redundanz verheerend wäre), ist der Nutzen höher als die Fehlersuche aufgrund einer zu komplexen Klammer 😉
 
Danke für die Hinweise..
@Kirax: Du hast recht.. Manchmal sollte man Code einfach auch mal deutlich ausschreiben..
@Hoax: leider ist die Ausgabe jetzt ein Zahlen Array..

[0, -40, 48, -80, 102, 51, -51, -92, 27, -99, 26, -92, -123, -26, 45, -7]

Java:
System.out.println(Arrays.toString(theDigest));

und damit kann ich auch nichts anfangen...
 
@Hoax Sorry wenn ich undeutlich war...
ich hatte oben aber geschrieben:

"Zur Ergänzung:
der Code soll der neue Name der Datei werden.."

Dank eurer Hilfen konnte ich dann ein gutes Beispiel zusammenschreiben

Danke
Thomas

Java:
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.security.MessageDigest;


public class Main3 {

	public static void main(String[] args) {
		try{
			File f2 = new File(System.getProperty("user.dir")+"\\src\\button_active.png"); 
		    BufferedInputStream in = new BufferedInputStream(new FileInputStream(f2));
			MessageDigest md = MessageDigest.getInstance("MD5");
			md.reset();
			int theByte = 0;
		    while ((theByte = in.read()) != -1) {
		      md.update((byte) theByte);
		    }
			byte messageDigest[] = md.digest();
		            
			StringBuffer hexString = new StringBuffer();
			for (int i=0;i<messageDigest.length;i++) {
				hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
			}
			System.out.println(hexString.toString());
		}catch(Exception e){
		            
		}
	}
}
 

Zurück
Oben