如何为这个Hash函数生成Salt?

时间:2014-08-07 14:39:17

标签: c# hash

我正在使用SO主题Hash and salt passwords in C#中的以下Hash函数。如何以字节数组格式生成salt值?

static byte[] GenerateSaltedHash(byte[] plainText, byte[] salt)
{
  HashAlgorithm algorithm = new SHA256Managed();

  byte[] plainTextWithSaltBytes = 
    new byte[plainText.Length + salt.Length];

  for (int i = 0; i < plainText.Length; i++)
  {
    plainTextWithSaltBytes[i] = plainText[i];
  }
  for (int i = 0; i < salt.Length; i++)
  {
    plainTextWithSaltBytes[plainText.Length + i] = salt[i];
  }

  return algorithm.ComputeHash(plainTextWithSaltBytes);            
}

1 个答案:

答案 0 :(得分:0)

像MD5,SHA-1甚至SHA-256这样的快速哈希算法是哈希密码的好选择,因为它们太快了,而且太容易暴力破解。可以使用通用硬件计算每秒约1 Giga SHA-256个值。

相反,您可以使用慢速键派生函数,如BCrypt或PBKDF2。 CSharp对PBKDF2有本机支持,它可以用Rfc2898DeriveBytes类实现,你可以找到here的例子。

这个BCrypt library也很容易使用。通常人们不确定使用这些库是否安全,但没有理由不使用它。只要库返回正确的值并正确生成salt,它应该没问题,因为安全性来自算法,而不是来自实现。