#java #c# #encoding #rsa
#java #c# #кодирование #rsa
Вопрос:
Я пытаюсь преобразовать этот код:
/**
* Create a new PublicKey from encoded X.509 data
*/
public static PublicKey decodePublicKey(byte[] par0ArrayOfByte)
{
try
{
X509EncodedKeySpec var1 = new X509EncodedKeySpec(par0ArrayOfByte);
KeyFactory var2 = KeyFactory.getInstance("RSA");
return var2.generatePublic(var1);
}
catch (NoSuchAlgorithmException var3)
{
var3.printStackTrace();
}
catch (InvalidKeySpecException var4)
{
var4.printStackTrace();
}
System.err.println("Public key reconstitute failed!");
return null;
}
в код C #, но я не могу найти ни одного рабочего решения на C#
Полный код вы можете найти здесь: code
Мое последнее решение
public PublicKey decodePublicKey(byte[] Data)
{
X509Certificate2 x509 = new X509Certificate2();
x509.Import(Data);
return x509.PublicKey;
}
но я получаю сообщение об ошибке
Необработанное исключение типа ‘System.Безопасность.Криптография.CryptographicException’ произошло в mscorlib.dll Дополнительная информация: Не удается найти запрошенный объект.
Комментарии:
1. Вы уверены, что передаете допустимый массив байтов, содержащий двоичные данные сертификата?
2. @Tarik В par0ArrayOfByte — это только открытый ключ, вероятно, закодированный
Ответ №1:
X509EncodedKeySpec
является SubjectPublicKey
частью сертификата. Поэтому вам, вероятно, нужно расшифровать эту структуру. Вы могли бы посмотреть BouncyCastle для C # и проверить Org.BouncyCastle.Asn1.X509.SubjectPublicKeyInfo.GetInstance(byte[])
Комментарии:
1. Извините, только частичный ответ, который у меня не было времени проверить самому.