.объем основных асимметричной криптографии
RSACryptoServiceProvider еще не реализован в .NET Core, поэтому, хотя мне удалось сгенерировать ключи, я не могу заставить Encrypt или Decrpyt работать, поэтому мне нужны мои собственные альтернативы.
Я не могу найти ничего полезного в интернете, чтобы направлять меня.
Логика, которую я хочу реализовать, такова
1. клиент вызывает API для открытого ключа RSA
2. API предоставляет открытый ключ
3. Клиент генерирует разовый ключ AES.
4. клиент шифрует ключ AES с помощью открытого ключа RSA
5. Клиент шифрует данные по алгоритму AES ключ
6. Клиент вызывает API для проверки подлинности поставки зашифрованный AES-ключ и зашифрованные учетные данные
7. API использует закрытый ключ RSA для расшифровки ключа AES
8. API использует ключ AES для расшифровки учетных данных
9. API использует учетные данные для проверки клиента
10. Если действует, API вопросы вышлю
Что я уже пробовал:
Я пробовал использовать RSACryptoServiceProvider непосредственно в своем коде и экспериментировал с Netcore.Шифрование (возможно, я был слишком быстр, чтобы отложить это в сторону). Я также сделал обширный поиск в интернете.
Логика выше терпит неудачу на шаге 7. Во избежание сомнений, клиент не является модулем .NET Core (его .NET 4.7.2), что позволяет мне пройти шаг 5.
Сгенерированное сообщение таково:
Работа на этой платформе не поддерживается.
и трассировка стека:
в системе.Безопасность.Cryptography.RSA.FromXmlString(строка xmlString)
на СКМЗ.Инфраструктура.Криптография.CryptoEngine.DecryptData(строка privateKey, байт[] dataToDecrypt) в D:\OneDrive\SBSB\projects\CentralMessageDistributionService_CoreAPI\CentralMessageDistributionService_CoreAPI\Infrastructure\Cryptography\CryptoEngine.cs:line 77
на CMDS.контроллерах.KeyController.GetJWTalt(строка symmetricKeyEncryptedAsJson) в D:\OneDrive\SBSB\projects\CentralMessageDistributionService_CoreAPI\CentralMessageDistributionService_CoreAPI\Controllers\KeyController.cs:line 196
а вот и фрагмент кода:
// Create an array to store the decrypted data in it byte[] decryptedData; using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) { // Set the private key of the algorithm rsa.FromXmlString(privateKey); decryptedData = rsa.Decrypt(dataToDecrypt, false); }
Когда я извлек его для этого редактирования, я понял, что это FromXmlString, который выбрасывает исключение. Мне уже пришлось заменить его для генерации ключей, вот где известная проблема, так что если я могу придумать перегрузку моего собственного метода, который установит закрытый ключ, то я должен это сделать.