Есть несколько способов (даже здесь, в SO), и все они упоминают, что лучший способ сохранить пароль в базе данных - это сохранить не пароль, не взломанный пароль, а для хранения хэша соленого пароля .
У меня простой вопрос: нужно добавить код, это правильный путь?
string username = "myUsr";
string password = "myPwd";
DateTime createDate = DateTime.UtcNow;
// Salt it
string saltedPwd = String.Concat(password, createDate.Ticks.ToString());
// Hash it
HMACSHA1 hash = new HMACSHA1(Encoding.Unicode.GetBytes(Helper.EncryptKey));
string encodedPwd = Convert.ToBase64String(
hash.ComputeHash(Encoding.Unicode.GetBytes(saltedPwd)));
// Create User in the database
db.CreateUser(username, encodedPwd, createDate);
Таблица пользователей базы данных
user_id | username | password | create_date | last_access | active
и после входа в систему повторите процесс и проверьте, является ли encodedPwd
такой же, как и предоставленный соленый, взломанный пароль.
Меня беспокоит только одно: это лучший способ солить пароль? Можно ли использовать дату создания (поскольку она всегда будет меняться, и я читал, что лучше всегда использовать разная соль
каждый раз, когда мы кодируем пароль ...
Или должна быть соль
совершенно другая переменная?