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

时间:2014-11-18 03:45:02

标签: asp.net hash salt saltedhash

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

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

// Salt将保存到DB

// hashedPassword将保存到DB。

所以我几乎没有问题。

1)我在一篇文章中读到“让你的盐至少与哈希函数的输出一样长”确定。 saltArray,hashedPasswordArray和在我的代码中声明的字节数组的大小是多少?我使用saltArray大小为24.可以吗?

2)如果我使用会发生什么?

bytes = Encoding.Unicode.GetBytes(SaltPlusPassword);

而不是

bytes = Encoding.UTF8.GetBytes(SaltPlusPassword);

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

4)如果我使用SHA256Managed而不是SHA256,是否有任何性能差异?哪个最好?

5)最后我是以正确的方式做到这一点的吗?上面代码有哪些缺点?你有什么建议吗?

1 个答案:

答案 0 :(得分:0)

为什么不使用ASP.NET提供的内置身份管理工具,而不是处理所有这些问题。见这里

http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity

更常见,更健壮。