我使用
从密码生成salt和hash值string salt = CreateSalt(TxtPassword.Text.Length);
string hash = CreatePasswordHash(TxtPassword.Text, salt);
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;
}
您建议在sql server中存储这些值的数据类型是什么?任何建议......
盐:9GsPWpFD
哈希:E778AF0DC5F2953A00B35B35D80F6262CDBB8567
答案 0 :(得分:8)
ASPNET_DB说这个 - 不会出错。
Password nvarchar(128) NOT NULL,
PasswordSalt nvarchar(128) NOT NULL,
虽然128可能看起来很多,但是各种类型的加密可能会导致比你开始时更大的字符串。绝对没有理由不跟随那些花费数千小时开发asp.net会员系统的聪明人的领导。
答案 1 :(得分:1)
我们将密码存储为二进制SHA512哈希