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:

HoaX

Top Contributor
Einfach was anderes ausgeben anstatt immer das Gleiche?!

Dein Array#toString gibt die Klasse + Hashcode zurück. Probiers doch mal mit Arrays.toString(byte[]);
 

kirax

Bekanntes Mitglied
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 ;)
 

Enigma228

Bekanntes Mitglied
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...
 

Enigma228

Bekanntes Mitglied
@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){
		            
		}
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R rund um MessageDigest Java Basics - Anfänger-Themen 15

Ähnliche Java Themen

Neue Themen


Oben