0

我想知道如何对密码进行加盐和哈希处理?我在网上找到了很多关于它的例子,但我还是做不好。

我有这个代码来生成盐和哈希

public static byte[] GetSalt()
{
    var p = new RNGCryptoServiceProvider();
    var salt = new byte[16];
    p.GetBytes(salt);
    return salt;    
}

public static byte [] GetSecureHash(string password, byte[] salt)
{
    Rfc2898DeriveBytes PBKDF2 = new Rfc2898DeriveBytes(password, salt);
    return PBKDF2.GetBytes(64);
}

但是,我不知道我在哪里使用这些方法,我有这个:

SqlParameter SalContraseña = new SqlParameter("@SalContraseña", SqlDbType.Binary, 16);
SalContraseña.Value = GetSalt();
cmd.Parameters.Add(SalContraseña);

SqlParameter HashContraseña = new SqlParameter("@HashContraseña",SqlDbType.Binary, 64);
HashContraseña.Value = GetSecureHash(Password,byte[]);
cmd.Parameters.Add(HashContraseña);

在这里,我将密码和哈希应用于SqlParameter,但我不确定它是否正确,或者这是否是执行此操作的正确形式。

我以创建用户的形式应用了这些代码,然后我不知道如何应用此代码来验证带有哈希的密码,我知道我需要以用户登录的形式执行此操作。

4

1 回答 1

1

您需要存储用于生成原始密码哈希的盐。然后,当用户尝试登录时,您检索该盐值并使用相同的哈希算法和最初使用的相同盐值对他们输入的密码进行哈希处理。如果生成的哈希与存储的用户哈希匹配,则身份验证成功。

于 2014-07-23T17:03:07.810 回答