16

我正在使用我的密码生成盐值和哈希值,

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

4

2 回答 2

10

ASPNET_DB 说这 - 不会出错。

Password nvarchar(128) NOT NULL,
PasswordSalt nvarchar(128) NOT NULL,

虽然 128 可能看起来很多,但各种类型的加密可能会导致比您开始时更大的字符串。绝对没有理由不跟随那些花费数千工时开发 asp.net 会员系统的非常聪明的人的领导。

于 2010-05-19T05:24:11.193 回答
1

我们将密码存储为二进制 SHA512 哈希

于 2010-05-19T05:40:45.420 回答