Frage

Ich habe ein paar verschiedene Code -Teile, aber die Kurzgeschichte ist, dass ich einige Passwörter mit SHA1 in eine MySQL -Datenbank einfüge und auch SHA1 -Hashes in .NET berechnet und sie nicht übereinstimmen. Ich denke, dies ist ein Problem mit meinem Codierungscode in .NET.

SQL -Code:

INSERT INTO user_credentials (Password) VALUES (SHA1('password'));

Passwort -Hashes bis 5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8

.NET -Code:

public static string GetPasswordHash(string password)
{
    // problem here with encoding?
    byte[] byteArray = Encoding.ASCII.GetBytes(password);

    SHA1 sha = new SHA1CryptoServiceProvider();
    byte[] hashedPasswordBytes = sha.ComputeHash(byteArray);

    return Encoding.ASCII.GetString(hashedPasswordBytes);
}

Passwort Hashes zu [? a ??????%l? 3 ~ ???

Danke für jede Hilfe!

War es hilfreich?

Lösung

Im Beispiel des MySQL -Beispiels kodieren Sie zu a hexadezimal String, im Beispiel .NET -Beispiel codieren Sie in ASCII. Die beiden Codierungen sind nicht gleich.

Wenn Sie in der .NET -Version in Hexadezimal konvertieren, erhalten Sie das richtige Ergebnis:

string hex = BitConverter.ToString(hashedPasswordBytes);

Ergebnis:

5B-AA-61-E4-C9-B9-3F-3F-06-82-25-0B-6C-F8-33-1B-7E-E6-8F-D8

Andere Tipps

Sie müssen setzen [?a??????%l?3~??? in VERHEXEN Darstellung. Was Sie drucken, ist wahrscheinlich in binärer Form (daher das Vielfache ? Chars).

Versuchen Sie das:

string hexstring = BitConverter.ToString(hashedPasswordBytes);

Und sehen, ob hexstring und Mysql Hash Match.

Im Folgenden entspricht Ihnen genau das, was MySQL produziert:

 BitConverter.ToString(SHA1CryptoServiceProvider.Create().ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(Password))).Replace("-", "").ToLower();

Die SHA1 -Hashes sollten gleich sein, aber die Darstellung ist es nicht. MySQL gibt eine Hex-Saite aus, sodass Sie dasselbe in .NET tun müssen:

return String.Join(String.Empty, hashedPasswordBytes.Select(b => b.ToString("x2")))

Wie ist Ihre MySQL -Tabelle/Datenbank codiert? Versuchen Sie, beides auf UTF-8 festzulegen (daher verwenden Sie coding.utf8.getBytes)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top