请检查以下课程。在这里,我正在做密码哈希,然后比较此密码哈希。现在我的问题是安全存储用户密码的最佳做法是吗?请提出建议,您可以在我的课程中添加更好的实现。预先感谢
public class myCrypto
{
public static string MakeHash(string value)
{
return Convert.ToBase64String(SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(value)));
}
public static bool CompareHash(string plainString, string hashString)
{
if (MakeHash(plainString)==hashString)
{
return true;
}
else
{
return false;
}
}
}
答案 0 :(得分:2)
有关散列的更多信息,请查看以下答案:
What is currently the most secure one-way encryption algorithm?
但是,在任何情况下都不要存储用户密码。仅存放盐腌的哈希。如果这样做的话,即使黑客发现了哈希,也只会对他们有一定的限制。
如果这样做,可以相对安全地将它们存储在安全的数据库中。确保数据库遵循所有安全最佳实践。
也请看一下:Best way to store password in database。
请注意,您并没有先设置密码。这是一个严重的安全漏洞,好像黑客发现了您的哈希算法并可以访问您保存的哈希一样,他可以将哈希与预先哈希的常用密码进行比较,以发现大部分用户的密码。>
盐是散列前添加到密码末尾的随机文本/二进制二进制文件。对于每个用户,这应该是不同的,并与哈希一起存储。这样,即使两个使用相同密码的人也将具有不同的哈希值,从而使黑客的生活更加艰难。
此答案讨论了如何在C#:Hash and salt passwords in C#中添加密码。它没有解释盐的产生方式。它应该是随机的,并且每个用户都不同,但是不需要密码保护。 System.Random可能会很好。