У меня есть этот код Java для создания открытого ключа на основе байтового массива base64 в Java:
return KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(base64PublicKeyBytes));
Эта строка впоследствии используется для шифрования некоторых данных.
Предположим, что у меня есть доступ к строке открытого ключа в кодировке base64. Будет ли эквивалентный код C# для генерации ключа таким же простым, как:
base64PublicKeyBytes = Convert.FromBase64String(base64PublicKey);
и это затем можно использовать с RSACryptoServiceProvider следующим образом:
var rsa = new RSACryptoServiceProvider(2048);
var rsaKeyInfo = rsa.ExportParameters(false);
rsaKeyInfo.Modulus = base64PublicKeyBytes;
Спасибо за ответ. Я подумал, что это было не так просто. Вот что я пытаюсь: #if WINDOWS var existingPublicKeyData = rsa.ToXmlString (false); // извлекаем исходную экспоненту и повторно используем var exponent = ParseExponentFromPublicKeyInfo (existingPublicKeyData); var keyInfo = CreateRSARequiredKeyFormatCreateRSARequiredKeyFormat (exponen t, orgEncryptionKey); Console.WriteLine («Повторно импортировать ключевую информацию.»); rsa.FromXmlString (keyInfo); #endif




Нет, все будет не так просто. .NET не поддерживает этот формат открытого ключа, также известный как формат SubjectPublicKeyInfo. Есть несколько способов справиться с этим. Один из них - использовать библиотеку Bouncycastle C#, которая поддерживает этот формат. Другой - преобразовать его в формат, поддерживаемый .NET, например в формат XML
RSA.ToXMLString().