MD5 funktioniert nicht korrekt !?

Hallo,

ich möchte mit Java MD5-Hashs berechnen. Ich benutze derweilen folgenden Code:
Java:
	public static String md5 (String str) {
		String ret = "";
		
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			md.update(str.getBytes());
			byte[] bytes = md.digest();
			
			for (int i=0; i<bytes.length; i++) {
				String tmp = Integer.toHexString((bytes[i] & 0xFF));
				ret += (tmp.length() == 1 ? "0" : "") + tmp;
			}
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		
		return ret;
	}

Hat bis jetzt immer funktioniert. Aber: Wenn ich mit dieser Funktionen den folgenden String hashe kommt was anderes raus, als wie, wenn ich es mit der PHP-Funktion md5() mache:
Java:
		char[] chars = {
				(char) 0x00,
				(char) 0x00,
				(char) 0x08,
				(char) 0xf8,
				(char) 0x02,
				(char) 0xbb,
				(char) 0xf8,
				(char) 0x01,
				(char) 0xf8,
				(char) 0x01,
				(char) 0x9c
		};
		String str = new String(chars);

Mit der Java-Funktionen kommt "5a58d7f3adffbb72f1cc3a2b73035130" raus. Mit PHP kommt "3a51926ffccb22364b85baa3bf3f0d4c".

Also erstmal: Warum kommt was unterschiedliches raus, weil wenn ich z.B. "hallo" oder so hashe, funktioniert es.

Dann dachte ich, nochmal nachggooglen. Dabei bin ich auf Viele Dinge - Fotografie, Computer und mehr » MD5-Summen mit Java richtig erstellen gestoßen, wo erklärt wird, wie man das in Java "richtig" macht. Das habe ich auch versucht; ohne Erfolg.

Also, wie mache ich es richtig?


Danke
kaeseohnekaese
 
Ich hab mal den String in PHP in eine Datei geschrieben und diese dann mit Java ausgelesen. Das funktioniert. Aber wo ist dann der Fehler im obigen Code?

Danke
kaeseohnekaese
 

turtle

Top Contributor
Echt?

Bei mir kommt 9fae664263c99e61134a4c36fae3701f raus.

Hier mein Code

Java:
	public static void main(String[] args) {
		char[] chars = {(char) 0x00, (char) 0x00, (char) 0x08, (char) 0xf8,
				(char) 0x02, (char) 0xbb, (char) 0xf8, (char) 0x01,
				(char) 0xf8, (char) 0x01, (char) 0x9c};
		String str = new String(chars);

		String encrypt = encrypt(str, "MD5");
		System.out.println(encrypt);
	}

	public static String encrypt(String plaintext, String algorithm) {
		MessageDigest md = null;

		try {
			md = MessageDigest.getInstance(algorithm);
			md.update(plaintext.getBytes("UTF-8"));
		} catch (UnsupportedEncodingException e) {
			return null;
		} catch (NoSuchAlgorithmException e) {
			return null;
		}
		return new BigInteger(1, md.digest()).toString(16);
	}
 
Also dass es bei dir "9fae664263c99e61134a4c36fae3701f" raus kommt, liegt daran dass du
Java:
md.update(plaintext.getBytes("UTF-8"));
geschrieben hast. Außerdem steht doch auf der Seite, dass die Methode mit BigInteger nur dann funktioniert, wenn das erste Byte größer als 15 ist, sonst fehlt eine null am Anfang.
 
T

tröööt

Gast
ähm ... also ich finde es eher sub-optimal hier einen string zu nutzen wenn man ein byte-array hat was bytes unter 0x20 enthält ...

arbeite lieber dierekt mit nem byte-array ... das sollte besser hinhauen
 
Danke! Funktioniert mit dem Byte-Array funktioniert es jetzt auch mit bytes unter 0x20. Aber noch eine Frage: Wenn ich Bytes größer 127 speicher gibt das negative Werte. Dazu eine Frage: Liegt das dran, weil dann das erste Bit von links 1 ist, und dieses dann besagt, dass das Byte negativ ist? Und meine zweite Frage dazu: Gibt es eine bessere Lösung ein Byte in eine Zahl zwischen 0 und 255 umzuwandeln als: ((256 + mein_byte) % 256) ?

Danke
kaeseohnekaese
 

xehpuk

Top Contributor
Liegt das dran, weil dann das erste Bit von links 1 ist, und dieses dann besagt, dass das Byte negativ ist?
Ja.
Code:
01111111
ist
Code:
127
als Zweierkomplement.
Code:
10000000
ist
Code:
-128
,
Code:
11111111
ist
Code:
-1
.

Gibt es eine bessere Lösung ein Byte in eine Zahl zwischen 0 und 255 umzuwandeln als: ((256 + mein_byte) % 256) ?
Code:
mein_byte & Byte.MAX_VALUE
Oft wird
Code:
0xFF
statt
Code:
Byte.MAX_VALUE
geschrieben.
 
Code:
mein_byte & Byte.MAX_VALUE
Oft wird
Code:
0xFF
statt
Code:
Byte.MAX_VALUE
geschrieben.

Also wenn ich
Code:
mein_byte & Byte.MAX_VALUE
mache funktioniert das nicht. Wenn ich
Code:
Byte.MAX_VALUE
ausgebe kommt 127 raus. Mit
Code:
mein_byte & 0xFF
gehts aber!
 

Timothy Truckle

Top Contributor
Also wenn ich
Code:
mein_byte & Byte.MAX_VALUE
mache funktioniert das nicht. Wenn ich
Code:
Byte.MAX_VALUE
ausgebe kommt 127 raus. Mit
Code:
mein_byte & 0xFF
gehts aber!
Der Grund ist: bei
Code:
mein_byte & Byte.MAX_VALUE
sind beide Operanden von Typ [JAPI]Byte[/JAPI], weshalb auch das Ergebnis von Typ [JAPI]Byte[/JAPI] (also mit Bit 7 als Vorzeichen) ist.
Bei
Code:
mein_byte & 0xFF
ist der zweite Operand ein [JAPI]int[/JAPI] und somit das Ergebnis auch dann positiv, wenn Bit 7 in
Code:
mein_byte
1 ist.

bye
TT
 

xehpuk

Top Contributor
Tatsache, das war Quatsch. Da wird das mit
Code:
0xFF
umso klarer. Bei meinem Test hatte ich leider die falsche Variable ausgeben lassen. :(
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Athena Programm funktioniert nur beim Debugging korrekt, sonst nicht. Allgemeine Java-Themen 1
D WSDL-Aufruf funktioniert nicht mehr nach Umstieg auf Maven Allgemeine Java-Themen 4
Zrebna Berechnung der Zeit funktioniert nicht wie erwartet: Date, GregorianCalendar Allgemeine Java-Themen 16
M Apache Proxy Weiterleitung auf Tomcat funktioniert nicht wie gewünscht Allgemeine Java-Themen 1
W While Schleife funktioniert nicht ganz Allgemeine Java-Themen 4
H do-while Schleife funktioniert nicht wie ich es möchte Allgemeine Java-Themen 7
ERlK JDA Code funktioniert nicht? Allgemeine Java-Themen 4
stormyark TikTakToe funktioniert nicht Allgemeine Java-Themen 10
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
M Map<String,String>funktioniert nicht richtig Allgemeine Java-Themen 4
P String.replace() funktioniert nicht? Allgemeine Java-Themen 3
boschl2000 Springerproblem-Implementierung funktioniert nicht richtig Allgemeine Java-Themen 1
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
N Regulärer Ausdruck funktioniert nicht Allgemeine Java-Themen 6
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
1Raini Java if-Abfrage funktioniert nicht! Allgemeine Java-Themen 3
Killunox MaxHeap Zuweisung unter Linux funktioniert nicht Allgemeine Java-Themen 1
Dann07 MP3 Datei abspielen funktioniert nicht Allgemeine Java-Themen 6
O Aus JAR-Datei erstellte EXE-Datei funktioniert nicht Allgemeine Java-Themen 10
A Mp3 Player funktioniert nicht Allgemeine Java-Themen 0
X JNA funktioniert nicht mehr Allgemeine Java-Themen 4
Drachenbauer Division mit Int funktioniert nicht Allgemeine Java-Themen 3
O docx-Datei erzeugung mit DocXStamper funktioniert nicht Allgemeine Java-Themen 2
F Schleife funktioniert nicht richtig Allgemeine Java-Themen 13
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Tesseract-OCR 4.0 unter Linux funktioniert nicht Allgemeine Java-Themen 3
J Neuronales Netz funktioniert mal und mal nicht. Allgemeine Java-Themen 3
T Umlaute in Eclipse einlesen funktioniert nicht Allgemeine Java-Themen 16
A Methodenaufruf funktioniert nicht richtig Allgemeine Java-Themen 5
C WindowBuilder Design funktioniert nicht Allgemeine Java-Themen 0
J FTPSClient funktioniert nicht Allgemeine Java-Themen 4
H IDEA IntelliJ Java Mail funktioniert nach Export nicht mehr! Allgemeine Java-Themen 1
M Operatoren Warum funktioniert diese überprüfung nicht? Allgemeine Java-Themen 7
R jar-Datei funktioniert nicht Allgemeine Java-Themen 2
E Open Declaration Funktioniert nicht Allgemeine Java-Themen 0
R Verschlüsselung funktioniert nicht Allgemeine Java-Themen 5
RalleYTN requires transitive funktioniert nicht? Allgemeine Java-Themen 7
P Best Practice Wieso funktioniert der Modulo - Operator nicht? Allgemeine Java-Themen 2
HarleyDavidson Eigener PropertyChangeListener funktioniert einfach nicht Allgemeine Java-Themen 3
J Exclude funktioniert nicht Allgemeine Java-Themen 2
K .jar funktioniert nicht vollständig Allgemeine Java-Themen 1
P Java https proxy (-Dhttps.proxyHost) Start-Parameter funktioniert nicht? Allgemeine Java-Themen 2
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
O Fahrenheit/Celsius Converter funktioniert nicht Allgemeine Java-Themen 2
M Serialisierung funktioniert nicht Allgemeine Java-Themen 9
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
J Arrays auf gleichheit untersuchen funktioniert nicht Allgemeine Java-Themen 11
P GUI: ArrayList anzeigen funktioniert nicht Allgemeine Java-Themen 5
H Timer funktioniert nicht? Allgemeine Java-Themen 3
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
O Mein JButton Array funktioniert nicht Allgemeine Java-Themen 3
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
J If Abfrage funktioniert nicht Allgemeine Java-Themen 4
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
U PersistenceManager.createEntityManager funktioniert nicht Allgemeine Java-Themen 3
D Java Datei nach Eclipse Export funktioniert nicht Allgemeine Java-Themen 0
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
H File.listFiles() funktioniert nicht... Allgemeine Java-Themen 10
JG12111989 Auswertung von Fragebogen funktioniert nicht! Allgemeine Java-Themen 7
M Primzahlberechnung funktioniert nicht. Allgemeine Java-Themen 4
A JFreeChart funktioniert nicht :( Allgemeine Java-Themen 6
C file.delete() funktioniert bei zweiten aufruf nicht mehr Allgemeine Java-Themen 3
F Datei einlesen funktioniert nicht Allgemeine Java-Themen 3
A Debugger im Java-Editor funktioniert nicht Allgemeine Java-Themen 5
B DB-Zugriff einer Webanwendung funktioniert nicht mit Java 7 Allgemeine Java-Themen 2
B Web-Anwendung funktioniert mit Java 1.8, aber nicht mit Java 1.7 (auf Client) Allgemeine Java-Themen 5
J Swing Cursor.WAIT funktioniert nicht nach JFileChooser Allgemeine Java-Themen 1
F JTextField funktioniert nicht Allgemeine Java-Themen 6
S CSV Eintrag der nächsten Zeile auslesen funktioniert nicht Allgemeine Java-Themen 8
S Command funktioniert in Kommandzeile aber nicht mit ProcessBuilder bzw. Runtime.exec auf MAC Allgemeine Java-Themen 3
G Verschlüsselungsalgorythmus funktioniert nicht Allgemeine Java-Themen 2
buggy84 Ausführen einer Batch mit Parameterübergabe funktioniert nicht richtig Allgemeine Java-Themen 18
G Befehl funktioniert in Eclipse allerdings nicht in einer Jar-Datei Allgemeine Java-Themen 3
N Werte aus Arrays auslesen funktioniert nicht Allgemeine Java-Themen 5
W getResources funktioniert nur in Eclipse, nicht in JAR Allgemeine Java-Themen 2
S Methode funktioniert nicht als ActionListener Allgemeine Java-Themen 4
M exec() funktioniert nicht Allgemeine Java-Themen 1
X Datentypen Dropzone.options funktioniert nicht Allgemeine Java-Themen 1
L Erste Schritte Eclipse und Lokal funktioniert - in HTML nicht! Allgemeine Java-Themen 2
M JAR Datei erstellen funktioniert nicht Allgemeine Java-Themen 5
Q JLabel Textausgabe funktioniert nicht Allgemeine Java-Themen 4
E SimpleDateFormat-Konvertierung funktioniert nicht Allgemeine Java-Themen 3
T Dateidownload Funktioniert nicht Allgemeine Java-Themen 4
K String.replace funktioniert nicht Allgemeine Java-Themen 3
G treeMap.putall funktioniert nicht?! Allgemeine Java-Themen 2
DaniSahne96 Threads Code funktioniert nicht wie er sollte Allgemeine Java-Themen 9
S Warum funktioniert die runable -.jar nicht? Allgemeine Java-Themen 7
P Eclipse Unter Windows erstelle .jar unter Linux (Ubuntu) funktioniert nicht Allgemeine Java-Themen 5
H Mit Ant erstelltes jar funktioniert nicht wie direkt in Eclipse Allgemeine Java-Themen 8
aze Jar ausführen über Runtime.execute funktioniert nicht Allgemeine Java-Themen 4
M Normalized Iteration count funktioniert nicht. Wo ist mien Denkfehler? Allgemeine Java-Themen 6
M Input/Output Datei erzeugen funktioniert nicht (immer) vom .jar aus Allgemeine Java-Themen 5
P Klassen Junit test funktioniert nicht... Allgemeine Java-Themen 11
H Kompilieren funktioniert nicht Allgemeine Java-Themen 4
L repaint() methode funktioniert nicht richtig! Allgemeine Java-Themen 3
M FTP [vfs] SFTP via VFS 2.0, Dateiübertragung funktioniert nicht Allgemeine Java-Themen 2
A String.split() funktioniert nicht richtig Allgemeine Java-Themen 4
H PrinterJob.getPageFormat() funktioniert nicht Allgemeine Java-Themen 4
GUI-Programmer Jar File funktioniert nicht auf PC2, auf PC1 schon Allgemeine Java-Themen 13
L Diamond funktioniert nicht mit anonymen inneren Klassen Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben