преобразование кода Java с помощью RSA в c#

#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. Извините, только частичный ответ, который у меня не было времени проверить самому.