2011-05-03 2 views
18

Quelle est la meilleure façon d'initier un nouvel objet RSACryptoServiceProvider à partir d'un X509Certificate2 que j'ai sorti d'un magasin de clés? Le certificat est associé à la fois aux clés publiques (pour le cryptage) et privées (pour le déchiffrement).Le meilleur moyen d'initacité RSACryptoServiceProvider de x509Certificate2?

Je suis actuellement en utilisant la méthode FromXmlString mais il doit y avoir une meilleure façon.

Merci

Répondre

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

et

RSACryptoServiceProvider privateKeyProvider = 
    (RSACryptoServiceProvider)certificate.PrivateKey; 

La propriété clé sur la propriété clé publique ou privée du certificat est de type AsymmetricAlgorithm.

+0

Merci blowdart, travaillé comme un charme. Peut-être que je devrais acheter ton livre. –

+0

Note: devrait être 'certificat.PrivateKey;' pas 'certificat.PrivateKey.Key;' –

+0

Oups, mon mauvais - édité – blowdart

8

La réponse de Blowdart est en effet correcte. Toutefois, pour plus de clarté, je tiens à préciser que si vous voulez que votre instance RSACryptoServiceProvider contienne les deux les clés publiques et privées du certificat X509 (en supposant que le certificat possède une clé privée). Vérifiez la propriété HasPrivateKey du certificat.

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

Dans le cas de RSA lorsque seule la clé publique est présente les paramètres RSA seulement Exponent et Modulus, tous les autres seront nuls; Si d'autre part la clé privée est présente, les paramètres RSA contiendront D, DP, DQ, Exponent, InverseQ, Module, P et Q.

+0

(RSACryptoServiceProvider) (c.HasPrivateKey? C.PrivateKey: c.PublicKey.Key); Cependant: Je ne ferais jamais ça. Je chargerais seulement la clef privée quand j'ai l'intention d'employer le fournisseur pour quelque chose qui le * exige * - et alors bien sûr ce n'est pas non plus de l'aide juste chargeant la clé publique à la place. –

Questions connexes