#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