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;
}
@Darin dès maintenant je stocke '' PasswordSalt' et PasswordHash' dans mon table .... devrais-je supprimer le champ "PasswordHash" de ma table? –
Pas du tout, vous avez besoin des deux. –
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