MD5-Berechnung ist NICHT gleich?

Scherbe

Grünschnabel
Hi,

ich hab ein Problem und zwar habe ich ein Webservice und eine Windowsforms Anwendung, die auf den Webservice zugreift.

Die WindowsForms-Anwendung erzeugt einen MD5-Hash von einem PW (nehmen wir als Beispiel "test") => C8059E2EC7419F590E79D7F1B774BFE6
...using System.Security.Cryptography;

Der Webservice allerdings berechnet sich einen eigenen MD5-Hash => 098F6BCD4621D373CADE4E832627B4F6
...System.Web.FormsAuthentication.HashPasswordForStoringInConfigFile("test", "MD5");

Dass die beiden Werte NICHT gleich sind, ist auf den ersten Blick zu sehen, aber WARUM? Ich dachte immer MD5 ist MD5... wie können da bei dem selben Wort unterschiedliche Hash-Codes entstehen?
Die beiden Eingaben sind auch 1:1 gleich, d.h. keine Leerzeichen vor oder hinter dem Wort...

Code:
/MD5
string Wert = "test";
UnicodeEncoding UE = new UnicodeEncoding();
byte[] HashValue, MessageBytes = UE.GetBytes(Wert);
MD5 md5 = new MD5CryptoServiceProvider();
string strHex = "";
	
HashValue = md5.ComputeHash(MessageBytes);
foreach(byte b in HashValue) 
{
	strHex += String.Format("{0:x2}", b);
}
txtMD5Hash.Text = strHex.ToUpper();

Wäre nett, wenn mir das jem. erklären kann oder eine Lösung weiß, wie die dann gleich sind...
Achja, in der WindowsForms-Anwendung ebenfalls System.Web.FormsAut... zu nutzen geht leider nicht, weil er FormsAuthentification nicht in System.Web findet (sagt er zumindest ;) )

[EDIT]
Allerdings geht "System.Security.Cryptography" in dem Webservice zu verwenden und dann sind die Werte auch gleich, aber trotzdem bleibt die Frage: "Warum ist MD5 nicht gleich MD5?"

Achja, warum ich es trotzdem gepostet hab ist, weil ich jetzt über 1h nach dem Problem gesucht habe (bis ich rausgefunden habe, dass ich kein Fehler begangen hab) und anderen dies ersparen möchte, falls sie die Suchfunktion verwenden *fg*
[/EDIT]

MfG Scherbe
 
Zuletzt bearbeitet:
Hi.

Der Hash ist der selbe, nur hast du einen kleinen Fehler drinnen, das Encoding!
Mit dem MD5CryptoServiceProvider verwendest du einen String der mit dem UnicodeEncoder zu einem Byte-Array verwandelt wurde. Für die Methode aus System.Web verwendest du den String so wie du ihn bekommen hast, und das ist wahrscheinlich UTF8.

Die Bytes dieser 2 Strings sind unterschiedlich, und deswegen hast du 2 unterschiedliche Ergebnisse.

Wenn du die UTF8Encoder Klasse verwendest solltest die 2 selben Ergebnisse bekommen. Bei mir ist es so.

Und wegen dem nicht finden der HashPasswordForStoringInConfigFile-Methode. Vergiss nicht die Referenz auf System.Web in deinem WindowsForms Projekt.

MfG,
Alex
 
Oh... ok, das mit dem Unicode und UTF8 werde ich gleich mal probieren, danke!

[EDIT]
Jupp, passt :eek:
[/EDIT]

MfG Scherbe
 
Zuletzt bearbeitet:
Zurück