Лучший способ инициализировать RSACryptoServiceProvider от x509Certificate2?
Каков наилучший способ инициировать новый объект RSACryptoServiceProvider
из X509Certificate2
, который я вытащил из хранилища ключей? Сертификат связан как с общедоступными (для шифрования), так и с частными (для дешифрования) ключами.
Я использую метод FromXmlString
, но должен быть лучший способ.
Спасибо
Ответы
Ответ 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.