Kriege falsche MD5

Hi,

ich habe eine Methode in der ich ein Bild skaliere(vergrößere) und dann unter einem Namen speicher der die md5 enthalten soll. Ich erhalte aber die falsche md5 und weiß noch nicht wie so.

Java:
	/**
	 * Aus dem Thumbnail soll ein Portrait erstellt werden.
	 * Nur die Weite muss angegeben werden, die neue Hoehe wird
	 * aus dem alten Hoehe-Weite Verhaeltnis bestimmt. Der neue
	 * Name enthaelt die md5 und als Suffix den Datentyp.
	 * 
	 * @param oldImage
	 * Enthaelt die Bild-Daten.
	 * @param destDir
	 * Pfad des Verzeichnisses unter dem das neue Bild gespeichert werden soll.
	 * @param width
	 * Die Breite des neuen Bildes.
	 */		
    private File getWidthScaledPortrait(File oldImage, String destDir, int width) throws Exception {
    	String imgType;
    	String md5Sum;
    	BufferedImage bufOldImage;
    	BufferedImage bufNewImage;
    	File newImage = null;
    	File assetsDir;
    	try{
    		assetsDir = makeDir(destDir);
    		imgType = getMimeType(oldImage.getAbsolutePath());
    		bufOldImage = ImageIO.read(oldImage);
    		bufNewImage = createWidthScaledImage(bufOldImage, width);
    		md5Sum = getMD5Checksum(bufNewImage, imgType);
    		newImage = new File(assetsDir.getPath()+"/"+md5Sum+"."+imgType);
    		ImageIO.write(bufNewImage, imgType, newImage);
    	} catch( IOException ex){
            ex.printStackTrace();
        }
    	return newImage;
    }

Die eigentliche md5 wird hier berechnet:
Java:
	public static String getMD5Checksum(BufferedImage fileImg, 
										String imgType) throws Exception {
		byte[] b = createChecksum(fileImg, imgType);
		String result = "";
		for (int i=0; i < b.length; i++) {
			result +=
				Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
		}
		return result;
	}    
    
	public static byte[] createChecksum(BufferedImage bufImg, String imgType) throws Exception {
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		ImageIO.write(bufImg, imgType, os);
		InputStream fis = new ByteArrayInputStream(os.toByteArray());
		byte[] buffer = new byte[1024];
		MessageDigest complete = MessageDigest.getInstance("MD5");
		int numRead;
		do {
			numRead = fis.read(buffer);
			if (numRead > 0) {
				complete.update(buffer, 0, numRead);
		 	}
	 	} while (numRead != -1);
		fis.close();
		return complete.digest();
	}

Weiß Jemand von Euch woran es liegen könnte? Von dem md5 Algorithmus habe ich leider keine Ahnung. Laut dem Programm müsste die md5 "b8b6134b3462861aa64d7c2ffc9d1702" lauten, obwohl mir mein md5sum unter Linux "9be6b6368d6f7e544af44f13480d40be" angibt.

Grüße Markus
 
Zuletzt bearbeitet:

Asgar13

Bekanntes Mitglied
Versuch mal diese hier:

Java:
	//Funktion MD5Hash
	public static String getMD5Hash(String input){
		StringBuffer stringBuffer = new StringBuffer();
		try {
		MessageDigest md5 = MessageDigest.getInstance("MD5");
		md5.reset();
		md5.update(input.getBytes());
		Formatter f = new Formatter(stringBuffer);
		for (byte b : md5.digest()) {
		f.format("%02x", b);
		}
		} catch (NoSuchAlgorithmException e) {
		}
		return stringBuffer.toString();
		}
 

turtle

Top Contributor
Dann ist Deine Bilddatei falsch.:autsch:

Wenn die mal richtig ist, kannst Du mal damit versuchen:
Java:
		try {
			File file = new File("splash.png");
			long length = file.length();
			byte[] content = new byte[(int) length];
			DataInputStream fstream = new DataInputStream(new FileInputStream(file));
			fstream.readFully(content);
			MessageDigest complete = MessageDigest.getInstance("MD5");
			complete = MessageDigest.getInstance("MD5");
			complete.update(content);
			byte[] b = complete.digest();
			String md5Hash = (new BigInteger(1, b)).toString(16);
			System.out.println(md5Hash);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
 

Ariol

Top Contributor
Dein Problem ist vermutlich, dass du die Checksumme eines Rohdatenbildes (BufferedImage) mit der einer Datei vergleicht.
Mit dem Code von Turtle sollte es eigentlich gehen.

Zur Übersicht könnte man den Code dann noch in eine Methode auslagern:
Java:
public String getMD5Sum(File file)
{
            long length = file.length();
            byte[] content = new byte[(int) length];
            DataInputStream fstream = new DataInputStream(new FileInputStream(file));
            fstream.readFully(content);
            MessageDigest complete = MessageDigest.getInstance("MD5");
            complete = MessageDigest.getInstance("MD5");
            complete.update(content);
            byte[] b = complete.digest();
            return new BigInteger(1, b).toString(16);
}
 
Dein Problem ist vermutlich, dass du die Checksumme eines Rohdatenbildes (BufferedImage) mit der einer Datei vergleicht.
Mit dem Code von Turtle sollte es eigentlich gehen.
Stimmt, das mache ich mit Absicht, um einige Arbeitsschritte zu sparen. Aber es funktioniert mit BufferedImage. :D Der Fehler lag in der Klasse zip. Dort habe ich alle 32Kbyte Begrenzungen durch 1000KByte ersetzt.

Grüße Markus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
J Panel + Label anzeigen - Ich kriege es nicht hin Java Basics - Anfänger-Themen 3
K Warum kriege ich keine 6 zufallige Zahlen raus ? Java Basics - Anfänger-Themen 11
G Kriege Java Datei nicht per Hand kompiliert Java Basics - Anfänger-Themen 4
G Wie kriege ich ein jpg transparent? Java Basics - Anfänger-Themen 6
T User input in Verbindung mit ChronoUnit anpassen und falls falsche Eingabe getätigtwird Java Basics - Anfänger-Themen 7
B Binärzahlen auflisten, falsche Ausgabe? Java Basics - Anfänger-Themen 1
Z Java ArrayList speichert falsche Daten ab bzw. gibt falsche Daten aus? Java Basics - Anfänger-Themen 42
volcanos HashSet und Iterator -> Falsche Sortierreihenfolge ? Java Basics - Anfänger-Themen 18
O Falsche Antworten zu Fragen Java Basics - Anfänger-Themen 4
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
D falsche eingabe erkennen Java Basics - Anfänger-Themen 2
F Wieso wird immer die falsche Mausposition angegeben? Java Basics - Anfänger-Themen 1
JaVaN0oB Wörterraten - Falsche Ausgabe, String/Chars vergleichen Java Basics - Anfänger-Themen 2
H Falsche Ausgabe Java Basics - Anfänger-Themen 2
K falsche Eingabe abfangen Java Basics - Anfänger-Themen 8
L Falsche Methode wird geladen Java Basics - Anfänger-Themen 2
T JLabel hat falsche größe Java Basics - Anfänger-Themen 1
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
T Input/Output Falsche Eingabe ausgeben Java Basics - Anfänger-Themen 3
R StringBounds falsche Ergebnisse Java Basics - Anfänger-Themen 5
D Falsche Zeile wird in JTable gelöscht Java Basics - Anfänger-Themen 6
W Array in String und String in Array - falsche Ausgaben Java Basics - Anfänger-Themen 20
T Falsche Ausgabe ???? Java Basics - Anfänger-Themen 13
S Falsche Ausgabe Java Basics - Anfänger-Themen 6
M Input/Output ISBN Leser - falsche Eingabe ausgeben Java Basics - Anfänger-Themen 2
V Personenverwaltung mit List<>, falsche Ausgaben Java Basics - Anfänger-Themen 5
R Methoden Switch wählt das Falsche Java Basics - Anfänger-Themen 17
K Falsche Methode Java Basics - Anfänger-Themen 3
J Falsche Darstellung von Float Java Basics - Anfänger-Themen 2
M Falsche Eingabe wiederholen lassen Java Basics - Anfänger-Themen 2
W Methoden Falsche Felder von Methode belgegt Java Basics - Anfänger-Themen 14
M falsche implementierung von currentTimeMillis() ? Java Basics - Anfänger-Themen 14
F charAt-Methode liefert falsche Unicode-Werte Java Basics - Anfänger-Themen 8
P Falsche Werte bei Zeitmessungen Java Basics - Anfänger-Themen 7
Helgon Falsche Zeichen im Text Java Basics - Anfänger-Themen 10
S Parameterübergabe - identische Funktionen, aber falsche Funktion Java Basics - Anfänger-Themen 5
G Bubblesort - Falsche Sortierung Java Basics - Anfänger-Themen 6
R run ->eclipse ruft falsche Programme auf Java Basics - Anfänger-Themen 5
D p q formel gibt zum Teil falsche Werte aus Java Basics - Anfänger-Themen 5
S Falsche Version? Java Basics - Anfänger-Themen 2
C Falsche Zeit Java Basics - Anfänger-Themen 2
V Falsche Augabe Java Basics - Anfänger-Themen 16
C Klammern einlesen!!! Falsche Ausgabe!!!! Java Basics - Anfänger-Themen 4
S Falsche Reihenfolge von Methodenaufrufen Java Basics - Anfänger-Themen 8
H Falsche Eingabe über try-catch abfangen Java Basics - Anfänger-Themen 2
K Verschiebeoperatoren - manchmal falsche Ergebnisse Java Basics - Anfänger-Themen 7
L Datenbankanbindung ODBC falsche pfadangabe? Java Basics - Anfänger-Themen 3
O Falsche Bed. (ein überlauf) seh den Fehler aber nicht. Java Basics - Anfänger-Themen 3
G static array liefert falsche Werte zurück Java Basics - Anfänger-Themen 2
S Falsche Ausgabe Java Basics - Anfänger-Themen 3
L Wegen TableSorter wird falsche Zeile einer Tabelle gelöscht? Java Basics - Anfänger-Themen 2
G falsche Version Java Basics - Anfänger-Themen 3
L Falsche Umsetzung von MVC, brauche Hilfe Java Basics - Anfänger-Themen 6
D Tabelle -> Daten eingeben -> Falsche erhalten Java Basics - Anfänger-Themen 9
S Falsche Ausgabe? Java Basics - Anfänger-Themen 2
F Falsche Daten aus Datei Java Basics - Anfänger-Themen 2
G Falsche Java befehle, doch was ist falsch? Java Basics - Anfänger-Themen 9
C falsche Eingabe abfangen Java Basics - Anfänger-Themen 8
M Falsche do-Schleife? Java Basics - Anfänger-Themen 4
E falsche Ausgabe Java Basics - Anfänger-Themen 7
D Falsche Datumsausgabe? Java Basics - Anfänger-Themen 5
J erhalte falsche Kalenderwoche - wo ist der Fehler? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben