Существуют разные способы (даже здесь, в SO), и все они упоминают, что лучший способ сохранить пароль в базе данных - это сохранить, а не пароль, а не пароль hased, но сохранить хэш соленых пароль.
Мой вопрос прост, вводя на него некоторый код, правильно ли это?
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
соленому, hased пароль, который был предоставлен.
Мое единственное беспокойство: это лучший способ солить пароль? Можно ли использовать созданную дату (так как это всегда будет изменяться, и я читаю, что лучше всего использовать всегда другой salt
каждый раз, когда мы кодируем пароль...
Или должна быть salt
совершенно другая переменная?