Подтвердить что ты не робот

Лучший способ инициализировать RSACryptoServiceProvider от x509Certificate2?

Каков наилучший способ инициировать новый объект RSACryptoServiceProvider из X509Certificate2, который я вытащил из хранилища ключей? Сертификат связан как с общедоступными (для шифрования), так и с частными (для дешифрования) ключами.

Я использую метод FromXmlString, но должен быть лучший способ.

Спасибо

4b9b3361

Ответ 1

RSACryptoServiceProvider publicKeyProvider = 
    (RSACryptoServiceProvider)certificate.PublicKey.Key;

и

RSACryptoServiceProvider privateKeyProvider = 
    (RSACryptoServiceProvider)certificate.PrivateKey;

Ключевое свойство свойства public или private key сертификата имеет тип AsymmetricAlgorithm.

Ответ 2

Ответ на битвард действительно правильный. Однако для ясности я должен отметить, что если вы хотите, чтобы ваш экземпляр RSACryptoServiceProvider содержал и общедоступные и закрытые ключи сертификата X509 (при условии, что у сертификата есть закрытый ключ). Проверьте свойство HasPrivateKey сертификата.

RSACryptoServiceProvider rsa;
if (cert.HasPrivateKey)
    rsa = (RSACryptoServiceProvider)cert.PrivateKey;
else
    rsa = (RSACryptoServiceProvider)cert.PublicKey.Key;

В случае RSA, когда присутствует только открытый ключ, параметры RSA будут только Exponent и Modulus, все остальные будут равны нулю; Если, с другой стороны, присутствует закрытый ключ, параметры RSA будут содержать D, DP, DQ, Exponent, InverseQ, Modulus, P и Q.