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
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.
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.
Genau das meinte ich. Du hast es nur besser dargestellt. Danke 😃