如何为这个Hash函数生成Salt
本文关键字:函数 Salt Hash | 更新日期: 2023-09-27 18:17:01
我正在使用以下哈希函数,来自c#中的SO主题哈希和盐密码。我如何在字节数组格式生成盐值?
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);
}
快速哈希算法,如MD5, SHA-1甚至SHA-256都不是哈希密码的好选择,因为它们太快了,很容易被暴力破解。使用普通硬件,每秒可以计算1千兆的SHA-256值。
相反,您可以使用慢速密钥派生函数,如BCrypt或PBKDF2。CSharp对PBKDF2有原生支持,它可以通过Rfc2898DeriveBytes类实现,你可以在这里找到一个例子。
同样易于使用的是这个BCrypt库。人们常常不确定使用这样的库是否安全,但没有理由反对使用它。只要库返回正确的值并正确生成salt,就应该没问题,因为安全性来自算法,而不是来自实现。