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