Найти открытый ключ из сертификата в виде строки XML - PullRequest
1 голос
/ 25 сентября 2011

Мне нужно найти открытый ключ из сертификата в виде строки XML.Я могу взять открытый ключ только как строку с этим методом:

public string CelesiPublik()
    {
        X509Certificate cer;
        cer = X509Certificate.CreateFromCertFile("C://certificate//EdonBajrami.crt");

        string Celesi = cer.GetPublicKeyString();
        return Celesi;
    }

, а затем я передаю это значение другому методу.Значение Celesi теперь имеет значение celesiPublik

  celesiPublik = e.Result;
    string NrTelefonit = "044-419-109";
    string salt = "VotimiElektronikKosove";
    AesManaged aes = new AesManaged();
   Rfc2898DeriveBytes rfc2898 = new Rfc2898DeriveBytes(celesiPublik,Encoding.UTF8.GetBytes(salt));
            aes.Key = rfc2898.GetBytes(aes.KeySize / 8);
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(celesiPublik);
            rsa.Encrypt(aes.Key, false);

, но оно показывает ошибку.Как я могу решить эту проблему?


GregS, я не могу использовать в Windows Phone 7 X509Certificate2.Я беру свой открытый ключ по методу:

`X509Certificate cer = new X509Certificate("C://certificate//EdonBajrami.crt");
        string publicKey = cer.GetPublicKeyString();`

я могу взять открытый ключ.Затем в другом методе я принимаю значение publicKey к другой строковой переменной Key:

`string Key = publicKey; 
  //-----First------
 RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            //----------
            RSAParameters RSAKeyInfo = new RSAParameters();
            byte[] celesibyte = System.Text.Encoding.UTF8.GetBytes(celesiPublik);
            byte[] Exponent = { 1, 0, 1 };

            RSAKeyInfo.Modulus = celesibyte;
            RSAKeyInfo.Exponent = Exponent;
            rsa.ImportParameters(RSAKeyInfo);
            //-----------
            /*  rsa.FromXmlString(celesi2Publik); */
            string edon = "Edon";
            byte[] edon1 = Encoding.UTF8.GetBytes(edon);
            byte[] edon2 = rsa.Encrypt(edon1, false);'

, но он посылает мне данные размером 506 байт, я не понимаю, почему, в чем проблема?

1 Ответ

2 голосов
/ 25 сентября 2011

Насколько я могу судить, класс X509Certificate почти бесполезен. Может быть, поэтому есть класс X509Certificate2? Используйте класс X509Certificate2. Вы можете создать RSACryptoServiceProvider непосредственно из открытого ключа, как показано ниже:

X509Certificate2 cert = new X509Certificate2(X509Certificate.CreateFromCertFile("C://certificate//EdonBajrami.crt"));  
RSACryptoServiceProvider rsa = (RSACryptoServiceProvider) cert.PublicKey.Key;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...