我正在使用此函数为密码生成哈希值,然后将其存储在数据库(SQL Server)中。
代码如下所示:
byte[] saltBytes = new byte[16];
new RNGCryptoServiceProvider ().GetBytes (saltBytes);
string salt = Convert.ToBase64String (saltBytes);
string saltedPasswordHash =
FormsAuthentication.HashPasswordForStoringInConfigFile (password + salt, FormsAuthPasswordFormat.SHA1.ToString ());
现在的问题是:HashPasswordForStoringInConfigFile()的输出格式是什么?我将它存储为char(长度)还是nchar(长度)?
或者是否存在其他任何存储哈希的首选方式,可能不是字符串?
非常感谢任何输入和半相关评论。
答案 0 :(得分:1)
SQL Server支持用于存储二进制数据的二进制列(binary(len)
和varbinary(len)
)。您可能想要考虑使用它们。在这种情况下,您可以直接使用System.Security.Cryptography.SHA512Managed
等类,而不是HashPasswordForStoringInConfigFile
答案 1 :(得分:1)
由于您使用的是C#,因此使用BCrypt散列解决方案可能值得考虑。它是由编写OpenBSD的人在BCrypt加密算法上设计的,是一种非常强大的算法。最好的部分是你不必担心盐(但它们在那里),随着时间的推移你可以使盐的生成变得困难。