首页 > 解决方案 > 在.net core 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;
            }
        }
    }

标签: c#asp.net-mvc

解决方案


有关散列的更多信息,请查看此答案:

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

但是,在任何情况下都不要存储您的用户密码。只存储盐渍哈希。如果您这样做,即使哈希被黑客发现,它对他们的使用也将受到限制。

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

另请查看:将密码存储在数据库中的最佳方式

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

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

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


推荐阅读