# md5 liefert unterschiedliche Testsummen?



## anonym (6. Jul 2010)

Hallo, 

ich erzeuge in einem Projekt mit untenstehendem Code md5- Testsummen. Da ich mir unsicher war, ob das so funktioniert, gibt es da auch ein Testcase für. Der Code steht ebenfalls unten. Über das Versionsmanagmentsystem für das Projekt habe ich die Klasse auf einen anderen Rechner übertragen, von Windows nach Linux. Und plötzlich failed der Testcase. Offenbar wird unter Linux eine anderer md5- Hash erzeugt als unter Windows. Woran kann das liegen? 

Und hier die beiden Codes: 

StringHelper.java: 

```
public static String md5(String phrase) throws NoSuchAlgorithmException{
		MessageDigest md = MessageDigest.getInstance("md5");
		md.reset();
		md.update(phrase.getBytes());
		byte[] pwBytes = md.digest();
		StringBuffer pwMd = new StringBuffer();
		for (int i = 0; i < pwBytes.length; i++) {
			String hex = Integer.toHexString(0xff & pwBytes[i]);
			if (hex.length() == 1)
				pwMd.append('0');
			pwMd.append(hex);
		}
		
		return pwMd.toString(); 
	}
```

und der Testcase: 


```
@Test
	public void md5test() throws NoSuchAlgorithmException{
		String phrase="ABZ7oöusdvjo";
		
		String md5=StringHelper.md5(phrase); 
		
		Assert.assertEquals("54e53f918859c84242a6d686eaa5b409", md5); 
	}
```

Vielen Dank für eure Hilfe, 
anonym


----------



## faetzminator (6. Jul 2010)

Warscheinlich am Umlaut. Unter Windows wirst du warscheinlich das Charset ISO-8859-1 (oder -15) und unter Linux UTF-8 verwenden.


----------



## anonym (6. Jul 2010)

Ich dachte immer, Java arbeitet bei String immer mit UTF-8?


----------



## Der Müde Joe (6. Jul 2010)

Das Problem ist das ö (oder allgemein Sonderzeichen)
Da:
getBytes: Encodes this {@code String} into a sequence of bytes using the platform's default charset

Bei 





> Win ISO-8859-1 (oder -15) und unter Linux UTF-8 ist


, ist das byte-Array verscheiden.
Wenns gleich sein soll getBytes("UTF-8") oder getBytes("ISO-8859-1") benutzen

EDIT:
>String immer mit UTF-8

intern UTF-16 ;-)

Ändert aber nix daran wie es als byte-Array enkodiert wird.


----------



## anonym (8. Jul 2010)

Das scheint's gewesen zu sein. Danke schön.


----------

