Laden...

SHA1 nicht gleich SHA1 [==> wegen unterschiedlicher Kodierung von Umlauten]

Erstellt von *neo* vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.674 Views
*
*neo* Themenstarter:in
299 Beiträge seit 2006
vor 11 Jahren
SHA1 nicht gleich SHA1 [==> wegen unterschiedlicher Kodierung von Umlauten]

Hallo,

ich möchte gerne einen SHA1 Wert aus einer beliebigen Zeichenkette berechnen. Dazu gibt es ja genug Beispiele.

Dazu habe ich folgenden Code verwendet:


SHA1 sha1 = new SHA1CryptoServiceProvider();
byte[] result = sha1.ComputeHash(Encoding.Default.GetBytes(text));

StringBuilder stringBuilder = new StringBuilder();

foreach (byte b in result)
{
   stringBuilder.Append(b.ToString("x2").ToLower());
}

return stringBuilder.ToString();

da bekomme ich folgenden Wert raus: ef6a95d07b67686770368aa92edcbd8b5d4cc675

Jetzt wollte ich im Internet gegen prüfen und da komme ich auf unterschiedliche Ergebnisse. Mein Ergebnis wird z.B. unter folgendem Link bestätigt SHA1 und md5 Generator

Aber unter SHA1 Hash Generator bekomme ich folgendes Ergebnis: 9b9d3a3195d0659752e17b787466cbf62bae2b2a

Die gemeinsame Zeichenkette ist: "das ist ein test für einen sha1"

Was ist den richtig?

Grüße

76 Beiträge seit 2008
vor 11 Jahren

Hallo,
lass mal bei beiden Tests das "ü" im String weg. Dann kommen die selben Ergebnisse heraus.

Das liegt vielleicht an folgendem:
Seite 1 nutzt

<meta http-equiv="Content-Type"  content="text/html; charset=ISO-8859-1">

Seite 2 nutzt

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

ISO-8859-1 != UTF-8

Ich denke, dass dadurch einer der Seiten einen falschen Wert (Wer kennt das nicht?) in der POST-Variable hat.

C
2.122 Beiträge seit 2010
vor 11 Jahren

Der Wert ist nicht mal falsch, sondern einfach nur ein anderer.
Im Beispiel wird ein byte[] mit Encoding.Default erstellt. Das ist ISO, daher stimmt das mit dem ISO-Link überein.
Erstell mal byte[] result = sha1.ComputeHash(Encoding.Utf8.GetBytes(text)); dann wird das mit den zweiten überein stimmen.

Das Problem daran ist einfach, dass Umlaute je nach Codierung aus unterschiedlichen Bytes bestehen.
Ich würde raten alles durchgehend in UTF8 zu codieren.

76 Beiträge seit 2008
vor 11 Jahren

Genau das meinte ich. Du hast es nur besser dargestellt. Danke 😃