Хэш-пароль в xamarin для сопоставления с хэшированным паролем базы данных

#c# #xamarin

#c# #xamarin

Вопрос:

Я очень новичок в xamarin, и в настоящее время мне нужно хэшировать свой пароль пользователя перед отправкой его в api, чтобы убедиться, что отправка простого текста через Интернет представляет угрозу безопасности.

В моем веб-приложении я использую Microsoft.AspNet.Идентифицируйте хэш-пароли и сохраните их в базе данных

  public UserManager<IdentityUser> UserManager { get; private set; }

string strPasswordHash = UserManager.PasswordHasher.HashPassword(viewModel.Password);
  

Я пытаюсь получить тот же алгоритм хэширования, что и этот, но безуспешно. Итак, я хотел бы знать, возможно ли каким-то образом получить тот же хэш в xamarin

Итак, при хэшировании следующего тестового пароля «TestP @ ssw0rd» я бы получил «AKtowbhuu47Dn4Pk8r4SM4zKo6P7N / N27afp6aDBL4sroWzOiXucrSG6kiHrjU2Ayw ==» итак, как бы мне в xamarin хэшировать тот же пароль, отправляя его в мой api, который использует Microsoft.AspNet.Идентификация.PasswordHasher() для проверки двух хэшированных паролей.

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

1. Вам действительно следует зашифровать свой хэш на стороне клиента с помощью одноразового номера, сгенерированного на стороне сервера, а затем попросить сервер расшифровать обычный текст и сгенерировать хэш с использованием серверной соли (отличной от одноразового номера). В противном случае, если вы выполняете хэширование на стороне клиента, тогда любой, кто перехватывает хэш, может просто использовать хэш напрямую самостоятельно — это все равно что получить пароль.

Ответ №1:

используйте using System.Безопасность.Криптография

  public string MD5Hash(string input)
    {
        System.Security.Cryptography.SHA512Managed sha512 = new System.Security.Cryptography.SHA512Managed();

        Byte[] EncryptedSHA512 = sha512.ComputeHash(System.Text.Encoding.UTF8.GetBytes(string.Concat(input, securityCode)));

        sha512.Clear();
        return Convert.ToBase64String(EncryptedSHA512);
    }
  

Ввод — это ваш открытый текст, а securityCode — ввод пароля для создания защищенного хэш-кода,
вы должны определить и назначить securitycode

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

1. Это помогает, но также не работает atm, поскольку я использую Microsoft. AspNet. Идентификация для хэширования паролей и сохранения их в базе данных, я знаю, что это солит их и т.д., Но что бы я ввел в качестве кода безопасности, чтобы получить тот же хэш в моем проекте xamarin, отправьте его в мой api, который их сравнит, потому что на данный момент это не удается, поскольку они не совпадают.

2. Майкрософт. AspNet. Идентификация. PasswordHasher () использует случайные соли для генерации хэш-кода, поэтому каждый раз вы будете получать другой хэш-код, а в xamarin вы можете использовать System. Безопасность. Криптография каждый раз будет генерироваться один и тот же хэш-код

3. Хорошо, спасибо, теперь я понимаю немного больше, но не могли бы вы, пожалуйста, объяснить, как я буду устанавливать securityCode, будет ли это код для того, как зашифрована строка

4. Проблема, с которой я все еще сталкиваюсь, заключается в том, что когда я отправляю хэшированный пароль в базу данных и отправляю его с помощью моего метода, чем сравнивает два хэша, он по-прежнему возвращает false, поскольку хэши не совпадают. даже когда я ввожу код безопасности, подобный 24

5. использовать securityCode типа «MART2SBNNI99212» и не сравнивать хэш на стороне клиента — небезопасный способ, просто отправьте сгенерированный хэш на сервер базы данных и сопоставьте в базе данных напрямую запрос типа select user_id от user, где id = @id и password = @password, где пароль — это хэшированный код, который поступает со стороны клиента id, и хэшированный код соответствует, он вернет user_id