Beste Weg, um zu initiieren RSACryptoServiceProvider von x509Certificate2?
Was ist der beste Weg, um initate eine neue RSACryptoServiceProvider
Objekt aus einer X509Certificate2
ich zog aus einem key store? Das Zertifikat ist verbunden mit der öffentlichen Hand (für die Verschlüsselung) und privaten (für die Entschlüsselung) Schlüssel.
Ich bin aktuell mit der FromXmlString
Methode, aber es muss einen besseren Weg geben.
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
und
Die key-Eigenschaft auf public-oder private-key-Eigenschaft des Zertifikats ist der Typ AsymmetricAlgorithm.
certificate.PrivateKey;
nichtcertificate.PrivateKey.Key;
Der empfohlene Weg ist die Verwendung
RSA
Basis-Klasse, und rufen Siecertificate.GetRSAPrivateKey()
.Da .NET 4.6 Umwandlung einer
RSACryptoServiceProvider
wie vorgeschlagen von @blowdart wird nicht mehr empfohlen. Dies ist noch mehr ein Problem, jetzt, da es mehrere Versionen von .NET (wie .NET-Core).Durch Gießen zu
RSACryptoServiceProvider
so, es gibt eine gute chance, die Sie möglicherweise erhalten, dieser cast exception (je nach Plattform und Bibliotheken verwendet):Der Grund ist die tatsächliche Umsetzung könnte auch anders sein, von jeder Plattform, die auf Windows
RSACng
verwendet wird.Hier ist ein link, der beschreibt das Problem (siehe Antwort von Jeremy Barton).
Blowdart die Antwort ist in der Tat richtig. Jedoch, für Klarheit ich sollte darauf hinweisen, dass, wenn Sie möchten, dass Ihre RSACryptoServiceProvider Beispiel enthalten beide die öffentlichen und privaten keys von X509-Zertifikat (vorausgesetzt, das Zertifikat ist ein privater Schlüssel). Überprüfen Sie die Zertifikat-Eigenschaft HasPrivateKey.
Im Fall von RSA, wenn nur der öffentliche Schlüssel ist vorhanden die RSA-Parameter wird nur für Exponent und Modulus, alle anderen werden null; Wenn auf der anderen Seite der private Schlüssel vorhanden ist der RSA-Parameter enthalten, D, DP, DQ, Exponent, InverseQ, E-Modul, P und Q.