C # MVC 5: как хэшировать пароль

#c# #model-view-controller #passwords

#c# #model-view-controller #пароли

Вопрос:

Кто-нибудь может мне помочь, я пытаюсь создать AspNetUser (таблица генерируется из mvc login, добавлены некоторые атрибуты к этому базовому объекту), я хочу хэшировать пароль точно так же, как функция User.Create(user, passwordToHash)

 var user = new AspNetUser();
user.UserName = "admin@mail.com";
user.Email = "admin@mail.com";
user.Nickname = "SuperAdmin"; // added by me
user.EmailConfirmed = true;
string userPWD = "PassToHash123";
user.PasswordHash = // Need Help 
db.AspNetUsers.Add(user);
db.SaveChanges();

// function to create standard user which not work with my modified AspNetUser
var chkUser = UserManager.Create(user, userPWD);
  

Но я не знаю, существует ли функция?

Можете ли вы сказать мне, есть ли функция, и если нет, мне нужно изменить систему входа в приложение?

Спасибо

Ответ №1:

У пользователя есть свойство PasswordHasher. Если доступно, используйте это для создания своей реализации hash else и установите свой собственный PasswordHasher.

Ответ №2:

Вы можете использовать алгоритм MD5 для хэширования вашего строкового пароля до хэш-строки длиной 36 символов.

 public static string MD5Hash(string input)
{
   StringBuilder hash = new StringBuilder();
   MD5CryptoServiceProvider md5provider = new MD5CryptoServiceProvider();
   byte[] bytes = md5provider.ComputeHash(new UTF8Encoding().GetBytes(input));

   for (int i = 0; i < bytes.Length; i  )
   {
     hash.Append(bytes[i].ToString("x2"));
   }
   return hash.ToString();
}
  

Комментарии:

1. Спасибо за вашу функцию, но ваша функция не хэшируется, как mvc UserManager?

2. Дайте мне пример хэш-строки из UserManager.

3. Не делайте этого. MD5 взломан.

4. Вы должны использовать: 1. Безопасный алгоритм хэширования. 2. Медленный хэш (т. Е. не только SHA256 и т.д.), Но и схема специально для паролей. 3. Вы должны использовать случайную соль, которая добавляется к паролю и к сохраненному хэшу, чтобы один и тот же пароль не хэшировался до одного и того же значения дважды. 4. Вам не следует пытаться писать этот код самостоятельно — используйте библиотеку.