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

时间:2018-12-02 07:10:26

标签: c# asp.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;
            }
        }
    }

1 个答案:

答案 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可能会很好。