Wie PKCS # 8 RSA privateKey (erstellt von OpenSSL) in C # importieren
-
19-09-2019 - |
Frage
Ich versuche, einen Weg zu finden, eine privateKey erstellt mit OpenSSL PKCS # 8 RSA in C #, ohne Verwendung externer Bibliothek zu lesen.
Hat jemand wissen, wie ich dies tun kann?
Lösung
Der einfachste Weg, dies zu tun mit eine externe Bibliothek wird mit dem (frei) Chillkat Public / private Key Component : dass verwenden, können Sie den Schlüssel importieren Verwendung erfolgen nur ein paar Zeilen Code und wenn Sie bereit sind, die $ 149 oder so für den Rest der Bibliothek zu zahlen, wird es mit der allgemeinen Krypto Konzepte viel einfacher und machen den Umgang.
Und im Gegensatz zu den regulären Microsoft .NET Framework, das Mono-Projekt hat scheint eine PKCS8 Implementierung , für die die full C # source zur Verfügung steht. Dies kann als Ausgangspunkt für den Fall geeignet sein, das Sie absolut nicht auf externe Bibliotheken verlassen können, die (LGPL 2.0) Lizenz für Sie mit dem Mono Code funktioniert im Zusammenhang davon aus ...
Schließlich wird das PKCS # 8-Format nicht zu schwierig zu analysieren, und die RSA / DSA-Schlüsselpaar Objekte sind gemäß
Andere Tipps
Vielen Dank für Ihre Antwort.
Mein Skript RSA-Schlüssel erstellen i verwendet OpenSSL Whit:
(Linux Script)
openssl genrsa -out ${NAME}_openssl.key 2048
openssl pkcs8 -topk8 -in ${NAME}_openssl.key -nocrypt > ${NAME}.key
openssl req -new -x509 -key ${NAME}.key -out ${NAME}.crt -outform DER
In C # müssen wir privateKey im XML-Format. Ich benutzen diese Parser, dies zu tun.
zu entschlüsseln de Herausforderung, die wir verwenden müssen:
byte[] challange = server.getChallenge();
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
rsaProvider.FromXmlString(Demo.Properties.Resources.XmlPrivateKey);
byte[] plaintext = rsaProvider.Decrypt(challange, false);
So verschlüsseln Sie Whit-Server-Zertifikat benötigen wir verwenden:
RSACryptoServiceProvider rsaProvider = x509.PublicKey.Key as RSACryptoServiceProvider;
byte[] answer = RsaProvider.Encrypt(plaintext, false);
Danke für JavaScience Beratung