2010-05-19 13 views
0

J'ai stocké les valeurs de sel et de hachage du mot de passe lors de l'enregistrement de l'utilisateur ... Mais lors de leur connexion je salais et hachage le mot de passe donné par l'utilisateur. nouveau sel et un nouveau hachage est généré ....comparaison des mots de passe salés et hachés lors de la connexion ne semble pas fonctionner correctement

string password = collection["Password"]; 
reg.PasswordSalt = CreateSalt(6); 
reg.PasswordHash = CreatePasswordHash(password, reg.PasswordSalt); 

Ces déclarations sont à la fois l'enregistrement et de connexion ....

sel et hachage lors de l'inscription était eVSJE84W et 18DE22FED8C378DB7716B0E4B6C0BA54167315A2

lors de la connexion c'était 4YDIeARH et 12E3C1F4F4CFE04EA973D7C65A09A78E2D80AAC7 ..... Toute suggestion ....

public static string CreateSalt(int size) 
    { 
     //Generate a cryptographic random number. 
     RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); 
     byte[] buff = new byte[size]; 
     rng.GetBytes(buff); 

     // Return a Base64 string representation of the random number. 
     return Convert.ToBase64String(buff); 
    } 

    public static string CreatePasswordHash(string pwd, string salt) 
    { 
     string saltAndPwd = String.Concat(pwd, salt); 
     string hashedPwd = 
     FormsAuthentication.HashPasswordForStoringInConfigFile(
     saltAndPwd, "sha1"); 

     return hashedPwd; 
    } 

Répondre

5

En ce moment, vous générez un sel différent lors de l'enregistrement et de connexion. Vous devez utiliser le même sel pour le hachage ou vous obtiendrez différents hashs. C'est-à-dire que vous avez besoin de stocker le sel dans la base de données avec le mot de passe et de le réutiliser en hachage lorsque l'utilisateur tente de se connecter plus tard.

Étapes:

  1. registres de l'utilisateur et fournit un mot de passe de texte brut
  2. vous créez un nouveau sel aléatoire et l'utiliser pour hacher le texte brut
  3. stocker le sel et le hachage dans la base de données
  4. Plus tard, l'utilisateur tente de se connecter en fournissant un nouveau mot de passe en texte brut. Vous allez chercher le hachage et le sel de la base de données
  5. Vous utilisez le sel de hachage du texte brut
  6. Comparez les deux hash
+0

@Darin dès maintenant je stocke '' PasswordSalt' et PasswordHash' dans mon table .... devrais-je supprimer le champ "PasswordHash" de ma table? –

+0

Pas du tout, vous avez besoin des deux. –

+2

Non, vous avez toujours besoin des deux dans la table ... mais vous devez en fait * les * utiliser aussi bien plus tard, pas seulement le hash. Utilisez le sel, appliquez-le pendant le processus de hachage au mot de passe fourni par l'utilisateur, puis comparez-le au hachage stocké. Ne générez pas de sel pour chaque connexion, uniquement pour l'enregistrement. – Amber