Проверка соленого и хэшированного пароля PBKDF2 в логине
Я следую примеру о том, как создать и проверить защищенный пароль с помощью PBKDF2, который я нашел из этого вебсайт
Что я уже пробовал:
Я создал класс под названием "HashCode", к которому я обращаюсь из формы регистрации и входа в систему, и я могу хэшировать и солить пароль во время регистрации пользователя, и он работает просто отлично.
Вот код, который хэширует и солит пароль:
class HashCode { public string GetHashPassword(string password) { string hashPass = string.Empty; byte[] salt; new RNGCryptoServiceProvider().GetBytes(salt = new byte[20]); var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000); byte[] hash = pbkdf2.GetBytes(20); byte[] hashBytes = new byte[40]; Array.Copy(salt, 0, hashBytes, 0, 20); Array.Copy(hash, 0, hashBytes, 20, 20); hashPass = Convert.ToBase64String(hashBytes); return hashPass; }
И вот как я вставляю его в базу данных:
command.Parameters.AddWithValue("@Password", hc.GetHashPassword(TxtBox_Password.Text));
Вот код, который проверяет пароль входа пользователя в систему:
public bool IsValidPassword(string password, string hashPass) { bool result = true; byte[] hashBytes = Convert.FromBase64String(hashPass); byte[] salt = new byte[20]; Array.Copy(hashBytes, 0, salt, 0, 20); var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000); byte[] hash = pbkdf2.GetBytes(20); for (int i = 0; i < 20; i++) { if (hashBytes[i + 20] != hash[i]) { throw new UnauthorizedAccessException(); } } return result; }
А на моем Логинформе у меня есть:
command.Parameters.AddWithValue("@Password", hc.IsValidPassword(TxtBox_Password.Txt));
Но это не работает. Любая помощь была бы очень признательна!
phil.o
Пожалуйста, дайте определение "не работает".
Member 14766911
Я думаю, что "IsValidPassword" принимает два параметра (string password, string hashPass), и я не знаю, как добавить их в TextBox_Password.Text
F-ES Sitecore
Вы должны хранить соль, а также хэшированный пароль пользователя, чтобы убедиться, что вы используете соль, которая соответствует той, которая используется в хэше. Вам действительно нужно прочитать об использовании соли с хэшированными паролями, так как похоже, что вы действительно не понимаете лежащую в ее основе концепцию.
Когда они создают свой пароль, вы получаете случайную соль и храните ее, а также
хэш(пароль + соль)
когда они пытаются войти в систему вы получаете соль которую использовали для хэширования их пароля и вы это делаете
хэш(loginPassword + usersSalt)
чтобы проверить, соответствует ли этот хэш тому, что хранится в базе данных.