Преобразование байтового массива в сертификат X.509 - PullRequest
4 голосов
/ 28 марта 2010

Я пытаюсь перенести часть кода Java в .NET, которая принимает строку в кодировке Base64, преобразует ее в байтовый массив и затем использует его для создания сертификата X.509, чтобы получить модуль и экспоненту для RSA шифрование.

Это код Java, который я пытаюсь преобразовать:

byte[] externalPublicKey = Base64.decode("base 64 encoded string");
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(externalPublicKey);
Key publicKey = keyFactory.generatePublic(publicKeySpec);
RSAPublicKey pbrtk = (java.security.interfaces.RSAPublicKey) publicKey;
BigInteger modulus = pbrtk.getModulus();
BigInteger pubExp = pbrtk.getPublicExponent();

Я пытался найти лучший способ конвертировать это в .NET. До сих пор я придумал это:

byte[] bytes = Convert.FromBase64String("base 64 encoded string");
X509Certificate2 x509 = new X509Certificate2(bytes);
RSA rsa = (RSA)x509.PrivateKey;
RSAParameters rsaParams = rsa.ExportParameters(false);
byte[] modulus = rsaParams.Modulus;
byte[] exponent = rsaParams.Exponent;

Что, на мой взгляд, должно работать, но оно выдает CryptographicException , когда я использую строку в кодировке base 64 из кода Java для генерации сертификата X509. Точное сообщение, которое я получаю:

Не удается найти запрошенный объект.

Является ли реализация Java X.509 просто несовместимой с .NET, или я что-то не так делаю при преобразовании из Java в .NET?

Или в этом случае просто нет преобразования из Java в .NET?

Ответы [ 2 ]

2 голосов
/ 28 марта 2010

Кажется, что ваши данные в кодировке base64 не представляют сертификат X.509:

[ X509EncodedKeySpec class ] представляет кодировку ASN.1 открытого ключа

Экспортируйте весь сертификат X.509 в Java или попробуйте найти эквивалент класса X509EncodedKeySpec в .NET Framework.

0 голосов
/ 28 марта 2010

Я сталкивался с подобной проблемой, и в моем случае она сводилась к проблеме 'endian'.

Решение было просто перевернуть байтовый массив (Array.Reverse в .NET)

У меня нет 2 IDE передо мной, чтобы показать доказательства, но если вы застряли, попробуйте!

...