我正在构建一个Web前端应用程序,它具有表用户和当前用户名和密码字段。我的问题是我应该将密码存储为:
我被告知二进制文件很受欢迎,但是如果我从登录表单中获取密码,如何将密码存储为二进制文件,如何将密码存储为二进制文件。
任何建议都将不胜感激!
答案 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进行比较。如果它们相同,则用户提供正确的密码(无论可能是什么)。如果它们不相同,则输入的密码不正确。