Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
盐渍密码散列。我在ASP.NET环境中做得对吗?_Asp.net_Hash_Salt_Saltedhash - Fatal编程技术网

盐渍密码散列。我在ASP.NET环境中做得对吗?

盐渍密码散列。我在ASP.NET环境中做得对吗?,asp.net,hash,salt,saltedhash,Asp.net,Hash,Salt,Saltedhash,我正在用ASP.NET开发一个网站。我想为我的用户实现登录身份验证。我使用SALT散列方法将用户密码安全地保存到数据库中。通过查看各种代码,我编写了如下代码来生成SALT和散列密码,以存储在数据库中 private string hashedPassword; private string Salt; private string SaltPlusPassword; private const byte saltSize = 24; byte[] salt

我正在用ASP.NET开发一个网站。我想为我的用户实现登录身份验证。我使用SALT散列方法将用户密码安全地保存到数据库中。通过查看各种代码,我编写了如下代码来生成SALT和散列密码,以存储在数据库中

    private string hashedPassword;
    private string Salt;
    private string SaltPlusPassword;
    private const byte saltSize = 24;
    byte[] saltArray;
    byte[] hashedPasswordArray;
    byte[] bytes;

   public void Save_Login(string passWord)
    {
        using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
        {
            saltArray = new byte[saltSize];
            rng.GetBytes(saltArray);
        }
        Salt = Convert.ToBase64String(saltArray);
        SaltPlusPassword = String.Format("{0}{1}", Salt, passWord);
        using (SHA256 sha = SHA256.Create())
        {
            bytes = Encoding.UTF8.GetBytes(SaltPlusPassword);
            hashedPasswordArray = sha.ComputeHash(bytes);
        }


        hashedPassword = Convert.ToBase64String(hashedPasswordArray);
    }
//盐将保存到DB

//hashedPassword将保存到数据库

所以我有几个问题

我在一篇文章中读到,make your salt至少和hash函数的输出一样长。我的代码中声明的saltArray、hashedPasswordArray和bytes数组的大小是多少?我使用的数组大小为24。可以吗

2如果我使用,会发生什么

字节=Encoding.Unicode.GetBytesSaltPlusPassword

而不是

字节=Encoding.UTF8.GetBytesSaltPlusPassword

3我应该使用什么数据类型在数据库中存储salt和哈希密码?我的数据库是MYSQL

4如果我使用SHA256Managed而不是SHA256,性能会有什么不同吗?哪一个最好


5最后,我这样做对吗?上述代码中有哪些弱点?您有什么建议?

与其解决所有这些问题,不如使用ASP.NET提供的内置身份管理工具。看这里


更常见、更健壮。

这与保护用户密码有什么关系因为它将为您保护用户的密码。这是实际的方法。你要使用saltcode静态吗?没有arijit。这不是一个静态的salt代码。它是使用RNGCryptoServiceProvider随机生成的。那么为什么要将它存储到数据库中呢?Arijit,我认为您应该阅读更多有关salt密码哈希的信息。这是给你的链接。Salt应该是随机生成的,您必须在用户的数据库记录中保存Salt和哈希。我从不保存W Salt密码。在这种情况下,我通常会将哈希密码存储在db中获取密码在我的应用程序中生成Salt在用户尝试登录时添加密码和Salt哈希密码和Salt使用jquery并将该数据发送到我的应用程序,因此传递的密码总是不同的