Соленое хеширование паролей. Я делаю это правильно в среде ASP.NET?

Я занимаюсь разработкой веб-сайта с использованием 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 и bytes, которые объявлены в моем коде? Я использовал размер saltArray как 24. Это нормально?

2) Что будет, если я буду использовать?

bytes = Encoding.Unicode.GetBytes (SaltPlusPassword);

вместо

bytes = Encoding.UTF8.GetBytes (SaltPlusPassword);

3) Какой тип данных я должен использовать для хранения соли и хешированного пароля в БД? (Моя БД MYSQL)

4) Есть ли разница в производительности, если я использую SHA256Managed вместо SHA256? Какой лучше?

5) Наконец, я делаю это правильно? Каковы недостатки в приведенном выше коде? Каковы ваши предложения?

1 ответ

Вместо того, чтобы решать все эти проблемы, почему бы не использовать встроенные средства управления идентификацией, предоставляемые ASP.NET. Посмотреть здесь

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

Гораздо более распространенный и надежный.

Другие вопросы по тегам