ASP.NET Sql Server 2008如何在数据库中存储密码

时间:2011-07-22 16:24:13

标签: asp.net sql-server

我正在构建一个Web前端应用程序,它具有表用户和当前用户名和密码字段。我的问题是我应该将密码存储为:

我被告知二进制文件很受欢迎,但是如果我从登录表单中获取密码,如何将密码存储为二进制文件,如何将密码存储为二进制文件。

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:2)

您必须基本哈希密码并将其存储在数据库中。你永远不会解密它们,但总是比较散列版本。下面是一些样品。

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

将PasswordHash和salt存储在用户帐户的数据库中。

然后,当用户下次尝试登录时,从数据库中获取salt并像往常一样使用用户在登录期间提供的密码进行哈希处理,并将该值与数据库中的PasswordHash进行比较。如果它们相同,则用户提供正确的密码(无论可能是什么)。如果它们不相同,则输入的密码不正确。