Question

J'ai quelques différents morceaux de code, mais la nouvelle est insérer des mots de passe dans une base de données MySQL en utilisant SHA1 et aussi calculer hash SHA1 dans .NET et ils ne sont pas assortis. Je pense que cela est un problème avec mon code de codage dans .NET.

code SQL:

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

hashs à 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8

code .NET:

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);
}

hashs à [? un l?% ?????? 3 ~ ???

Merci pour toute aide!

Était-ce utile?

La solution

Dans l'exemple de MySQL vous encodez un hexadécimale chaîne, dans l'exemple .NET vous sont un encodage en ASCII. Les deux codages ne sont pas les mêmes.

Si vous convertissez en hexadécimal dans la version .NET vous obtenez le résultat correct:

string hex = BitConverter.ToString(hashedPasswordBytes);

Résultat:

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

Autres conseils

Vous devez mettre [?a??????%l?3~??? HEX représentation. Ce que vous imprimez est probablement sous forme binaire (d'où les multiples caractères de ?).

Essayez de faire ceci:

string hexstring = BitConverter.ToString(hashedPasswordBytes);

Et voir si hexstring et MySQL correspondance de hachage.

Ce qui suit vous donnera une correspondance exacte à ce que MySQL produit:

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

Les hash SHA1 doit être égale, mais la représentation est pas. MySql émet une chaîne hexadécimale, de sorte que vous devrez faire la même chose dans .NET:

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

Comment votre table MySQL / base de données codées? Essayez de régler à la fois en UTF-8 (donc en utilisant Encoding.UTF8.GetBytes)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top