Le meilleur moyen de lancer RSACryptoServiceProvider de x509Certificate2?
Quel est le meilleur moyen d'attente d'un nouveau RSACryptoServiceProvider
objet à partir d'un X509Certificate2
j'ai sorti d'un magasin de clés? Le certificat est associé à la fois public (pour le chiffrement) et privé (pour le décryptage des clés.
Je suis actuel à l'aide de la FromXmlString
méthode, mais il doit y avoir une meilleure façon.
Grâce
Vous devez vous connecter pour publier un commentaire.
et
La propriété de la clé sur le publique ou privée, de propriété de la clé du certificat est de type AsymmetricAlgorithm.
certificate.PrivateKey;
pascertificate.PrivateKey.Key;
La manière recommandée est d'utiliser
RSA
de la classe de base et de l'appelcertificate.GetRSAPrivateKey()
.Depuis .NET de 4,6, casting pour
RSACryptoServiceProvider
comme suggéré par @blowdart n'est plus recommandé. C'est même plus un problème maintenant, étant donné qu'il existe plusieurs versions de .NET (tels que .NET de Base).Par la coulée de
RSACryptoServiceProvider
de cette façon, il ya une bonne chance que vous pourriez obtenir ce cast exception (selon la plate-forme et des bibliothèques utilisées):La raison en est la mise en œuvre réelle peut être différente de chaque plate-forme, sur Windows
RSACng
est utilisé.Voici un lien qui décrit ce problème (voir réponse par Jeremy Barton).
Blowdart la réponse est en effet correcte. Cependant, pour plus de clarté, je tiens à signaler que si vous voulez que votre RSACryptoServiceProvider exemple pour contenir les deux les clés publique et privée du certificat X509 (en supposant que le certificat ne disposer d'une clé privée). Vérifiez le certificat de propriété HasPrivateKey.
Dans le cas de RSA, lorsque seule la clé publique est présent, le RSA les Paramètres seront seulement Exposant et le Module, tous les autres seront null; en revanche, Si la clé privée est présent, le RSA les Paramètres contiennent D, DP, DQ, Exposant, InverseQ, le Module, P et Q.