在.net核心mvc应用程序上存储用户密码的最佳方式



请检查下面的类。这里我正在做密码散列,然后比较这个密码散列。现在我的问题是,安全地存储用户密码是最佳做法吗?请提供建议,您可以在我的课堂上添加更好的实现。提前感谢

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;
}
}
}

有关哈希的更多信息,请查看以下答案:

目前最安全的单向加密算法是什么?

但是,在任何情况下都不要存储您的用户密码。只储存腌过的哈希。如果你这样做,即使哈希被黑客发现,它对他们的用处也有限。

如果你这样做,你可以相对安全地将它们存储在一个安全的数据库中。确保数据库遵循了所有安全最佳实践。

还可以看看:在数据库中存储密码的最佳方式。

请注意,您不会先对密码进行盐析。这是一个严重的安全漏洞,就好像黑客发现了你的哈希算法并可以访问你保存的哈希,他可以简单地将哈希与预先哈希的常见密码进行比较,以发现你的大部分用户的密码。

salt是在散列之前添加到密码末尾的一段随机文本/二进制blob。对于每个用户,这应该是不同的,并与哈希一起存储。这样,即使是两个密码相同的人也会有不同的哈希,这让黑客的生活更加艰难。

这个答案讨论了C#中的salting密码:C#中的Hash和salt密码。它没有解释盐是如何产生的。它应该是随机的,每个用户不同,但不需要加密安全。系统Random可能会做得很好。

最新更新