2011-07-22 2 views
0

Je suis en train de créer une application web frontale, qui a des utilisateurs de table et bien sûr un champ nom d'utilisateur et mot de passe. Mon question est quel type de données dois-je stocker le mot de passe comme:ASP.NET Sql Server 2008 Comment stocker le mot de passe dans la base de données

On m'a dit que binary est populaire, mais comment puis-je stocker le mot de passe comme binaire, c'est-à-dire si je capture le mot de passe du formulaire de connexion. chaîne à binaire.

Toutes les suggestions seraient appréciées!

+1

duplication possible de [stocker les mots de passe dans SQL Server] (http://stackoverflow.com/questions/876342/storing-passwords-in-sql-server) – Yuck

Répondre

2

Vous devez fondamentalement hacher vos mots de passe et les stocker dans la base de données. Vous ne les décryptez jamais mais comparez toujours les versions hachées. Quelques exemples de choses sont ci-dessous.

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

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

    return hashedPwd; 
    } 

Stockez le mot de passe dans la base de données dans le compte de l'utilisateur. Ensuite, lorsque l'utilisateur tente de se reconnecter la prochaine fois, récupérez le sel de la base de données et hachez-le comme d'habitude avec le mot de passe fourni par l'utilisateur lors de la connexion et comparez cette valeur à PasswordHash dans la base de données. Si elles sont identiques, l'utilisateur a fourni le mot de passe correct (quel qu'il soit). Si elles ne sont pas identiques, le mot de passe entré est incorrect.

+0

+1, mais plus sûr (IMHO) à salt dans la base de données de sorte que la valeur n'a jamais à voyager sur le fil. – Yuck

+0

Je suis d'accord. J'ai pris cela d'un article en ligne. –

+0

Et désolé est-il correct de simplement stocker ces DB Type Varchar dans DB? – StevieB

Questions connexes