1

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

//盐将被保存到数据库

//hashedPassword 将被保存到数据库。

所以我有几个问题。

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

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

bytes = Encoding.Unicode.GetBytes(SaltPlusPassword);

代替

bytes = Encoding.UTF8.GetBytes(SaltPlusPassword);

3) 我应该使用什么数据类型在数据库中存储盐和散列密码?(我的数据库是 MYSQL)

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

5)最后我以正确的方式做这件事吗?上面的代码有什么弱点?你有什么建议?

4

1 回答 1

0

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

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

更常见和更强大。

于 2014-11-18T06:10:00.417 回答