Соленое хеширование паролей. Я делаю это правильно в среде 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
Гораздо более распространенный и надежный.