CRC32 aus byte array

wiesel25

Mitglied
Hallo erstmal,

vielleicht kann mir jemand paar Tips geben wie ich das hier in Java lösen kann.


Ich habe in C# ein Programm das mir aus einem String die MD5 errechnet und dann aus dem ByteArray der MD5 eine CRC32 checksumme erzeugt (mit Beispiel String "hallo").


In C# bekomme ich bei :
MD5 : 598D4C200461B81522A3328565C25F7C
CRC32 aus MD5 bytearray : 7DEF900A

genau das sollte auch in Java rauskommen.
Ist Leider nicht der Fall, MD5 stimmt aber die CRC32 aus dem MD5 bytearray nicht mehr...



Java:
byte[] md5array = MD5.MD5("hallo").getBytes();
String mdstring = MD5.MD5("hallo").toString().toUpperCase();

// MD5 = 598D4C200461B81522A3328565C25F7C	

 java.util.zip.CRC32 x = new java.util.zip.CRC32();
	        x.update(md5array);
	        System.out.println("CRC32  = " + Long.toHexString(x.getValue()));

//CRC32  :  a204bbb4



Danke im Voraus

Mfg
wiesel25
 
Ich vermute mal, dass dein ByteArray bereits nicht stimmt.
Java:
byte[] a = "5C".getBytes();
// ist nicht das gleiche wie
byte[] b = new byte[]{0x5C};
Du müsstest also MD5 anders interpretieren
 
Mit dem Beispiel aus der Zeile 2 funktioniert es, so bekomme ich das richtige Ergebnis.
Wie kann ich einen String in ein ByteArray umwandeln so dass es so wie in der Zeile 2 erzeugt wird.

Ich habe es ja so gemacht wie du es in der Zeile 1 beschrieben hast und so geht es nicht.....


Gruss
wiesel25
 
K.a., ob es da etwas Java-Internet existiert, aber du könntest sowas wie:
Java:
private static byte[] fromHexString(String hexString) {
	if ((hexString.length() % 2) != 0) {
		hexString = "0"+hexString;
	}
	final byte result[] = new byte[hexString.length() / 2];
	for (int i=0;i<hexString.length()/2;i++) {
		result[i] = (byte) Integer.parseInt(hexString.substring(2*i, 2*i+2), 16);
	}
	return result;
}
machen.
 
Da Du die Methode getBytes() ohne Angabe einer Kodierung verwendest, kannst Du auf anderen Systemen andere Ergebnisse bekommen. Vielleicht ist das so gewollt, aber ich dachte, ich weise mal darauf hin.
 

Zurück
Oben