我想知道我怎么做盐&哈希密码?我在网上找到了很多关于它的例子,但我仍然做不好。
我有下面的代码来生成Salt和Hash
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
,但我不确定它是否正确,或者这是否是正确的形式。
我在创建用户的表单中应用了这些代码,然后我不知道如何应用这些代码来验证具有哈希值的密码,我知道我需要在用户记录的表单中这样做。
您需要存储用于生成原始密码散列的盐。然后,当用户试图登录时,您将检索该盐值,并使用相同的散列算法和最初使用的相同盐值对他们输入的密码进行散列。如果结果散列与存储的用户的散列匹配,则身份验证成功。