Domanda

Sto cercando di trovare un modo per leggere un PrivateKey creato utilizzando OpenSSL PKCS # 8 RSA in C #, senza librerie esterne uso.

Qualcuno sa come posso fare questo?

È stato utile?

Soluzione

Il modo più semplice per farlo con una libreria esterna, sta usando il (gratuito) Chillkat pubblico / privato componente chiave : usando che, importando la chiave può essere fatto utilizzando solo poche righe di codice e se siete disposti a pagare i $ 149 o così per il resto della biblioteca, si farà fare con i concetti di crittografia generale molto più facile pure.

E a differenza del normale Microsoft .NET Framework, il progetto Mono fa sembrano avere un attuazione PKCS8 per cui la pieno C # source è disponibile. Questo può essere adatto come punto di partenza nel caso in cui non si può assolutamente fare affidamento su librerie esterne, assumendo la licenza (LGPL 2.0) associato al codice Mono funziona per voi ...

Infine, il PKCS # 8 formato non è troppo difficile da analizzare, e gli oggetti coppia di chiavi RSA / DSA sono secondo PKCS # 11 e relativamente facile da convertire in un X509Certificate .NET una volta a capire dove tutti i bit vanno - in realtà ho fatto questo in VB.NET qualche tempo fa, ma purtroppo non sono in grado di condividere il codice.

Altri suggerimenti

Grazie per la risposta.

Il mio script per creare chiavi RSA ho usato OpenSSL Pentecoste:

(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 # abbiamo bisogno PrivateKey in formato XML. Ho usato questo parser per fare questo.

Per decifrare de sfida abbiamo bisogno di usare:

  byte[] challange = server.getChallenge();

  RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();

  rsaProvider.FromXmlString(Demo.Properties.Resources.XmlPrivateKey);

  byte[] plaintext = rsaProvider.Decrypt(challange, false);

Per crittografare certificato del server di Pentecoste abbiamo bisogno di usare:

  RSACryptoServiceProvider rsaProvider = x509.PublicKey.Key as RSACryptoServiceProvider;

  byte[] answer = RsaProvider.Encrypt(plaintext, false);

Grazie per JavaScience Consulenza

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top