Как получить доступ к методу с sealed class?

Привет! Есть такой метод
public sealed class PasswordHasher : IPasswordHasher
{
  private const int SaltSize = 16; // 128 bit 
  private const int KeySize = 32; // 256 bit

  public <b>PasswordHasher</b>(IOptions<HashingOptions> options)
  {
    Options = options.Value;
  }

  private HashingOptions Options { get; }

  public string Hash(string password)
  {
    using (var algorithm = new Rfc2898DeriveBytes(
      password,
      SaltSize,
      Options.Iterations,
      HashAlgorithmName.SHA512))
    {
      var key = Convert.ToBase64String(algorithm.GetBytes(KeySize));
      var salt = Convert.ToBase64String(algorithm.Salt);

      return $"{Options.Iterations}.{salt}.{key}";
    }
  }

  public (bool Verified, bool NeedsUpgrade) Check(string hash, string password)
  {
    var parts = hash.Split('.', 3);

    if (parts.Length != 3)
    {
      throw new FormatException("Unexpected hash format. " + 
        "Should be formatted as `{iterations}.{salt}.{hash}`");
    }

    var iterations = Convert.ToInt32(parts[0]);
    var salt = Convert.FromBase64String(parts[1]);
    var key = Convert.FromBase64String(parts[2]);

    var needsUpgrade = iterations != Options.Iterations;

    using (var algorithm = new Rfc2898DeriveBytes(
      password,
      salt,
      iterations,
      HashAlgorithmName.SHA512))
    {
      var keyToCheck = algorithm.GetBytes(KeySize);

      var verified = keyToCheck.SequenceEqual(key);

      return (verified, needsUpgrade);
    }
  }
}


Интерфейс

public interface IPasswordHasher
{
  string Hash(string password);
  
  (bool Verified, bool NeedsUpgrade) Check(string hash, string password);
}


public sealed class HashingOptions
{
  public int Iterations { get; set; } = 10000;
}


Есть форма Registration, которая принимает данные с формы регистрации которая в пост методе принимает введенные данные с формы регистрации и добавляет их в таблицу.

public async Task<IActionResult> OnPostAsync()
        {
            if (ModelState.IsValid)
            {
                User user = new()
                {
                    Name = registration.Name,
                    Surname = registration.Surname,
                    Username = registration.Username,
                    Email = registration.Email,
                    Password = ТУТ!!!!!!!!!
                };
                await _db.Users.AddAsync(user);
                await _db.SaveChangesAsync();
                return Redirect("Index");//for test
            }
            else
            {
                return Page(); //when input doest not validated
            }
        }


Как введенный юзером в форме пароль мне отправить в метод Hash ? Подскажите, пожалуйста.
  • Вопрос задан
  • 49 просмотров
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
Password  = new PasswordHasher(options).Hash(registration.Password);


Но вообще где-то можно получить список разных IPasswordHasher и выбрать нужный.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы