2013-05-14 19 views
5

Ho cercato di trovare come importare una chiave ECC da un file di QUALSIASI MEZZO per età. Ho provato ad accedere a un certificato ECC dall'archivio certificati di Windows, da un file .p12 e da un file chiave OpenSSL PKCS # 8 senza successo.CNG Import ECC Pub/Priv Keyfrom file

solo una delle tante cose che ho provato è:

StreamReader fs = new StreamReader("key.pem"); 
String key = fs.ReadToEnd(); 
byte[] tempkey = System.Text.Encoding.ASCII.GetBytes(key); 
CngKey cngKey = CngKey.Import(tempkey, CngKeyBlobFormat.Pkcs8PrivateBlob); 

Ma nessun messaggio di errore discriptive sono dati, solo che l'ultima riga o ha invalid parameters o, nel caso del codice di cui sopra An error occurred during encode or decode operation.

Sto usando il sample program da MSDN per ECDH e altered it per utilizzare la modalità GCM di AES. Tutto ciò funziona fino a quando non cerco di utilizzare chiavi ECC pre-generate invece di quelle create di default in fase di esecuzione per l'esempio Microsoft. Ho provato a caso tutti gli CngKeyBlobFormat s ma, a dire il vero, non riesco a eseguire il debugging molto bene perché non so quali siano questi formati specifici nei dati grezzi.

La mia chiave è nel seguente formato però io sono disposto a utilizzare qualsiasi formato che funziona (.p12, Microsoft Store, PKCS # 8, ecc)

key.pem

-----BEGIN EC PARAMETERS----- 
############################## 
-----END EC PARAMETERS----- 
-----BEGIN EC PRIVATE KEY----- 
############################## 
-----END EC PRIVATE KEY----- 

Risorse

MSDN API and Example: ECDiffieHellmanCng Class

MSDN API: CngKey Class

MSDN Blogs: AES GCM Mode

OpenSSL - Creating ECC keys

risposta

0

Anche se questo potrebbe non essere l'unico problema, non si può semplicemente ASCII codificare un file PEM e poi agire in quanto è un PKCS # 8 blob codificato. PKCS # 8 è specificato in ASN.1, che è normalmente codificato BER/DER. La base 64 PEM codifica questa codifica binaria e quindi inserisce un'intestazione e un piè di pagina attorno alla base 64 per indicare il tipo di dati che è stato codificato.

Si noti che i parametri codificati potrebbero dover essere saltati. Speriamo che questi parametri siano presenti nella codifica della chiave privata.

+0

Ci scusiamo per l'aggiunta in ritardo, potrebbe essere molto difficile ottenere CNG per importare le chiavi in ​​questo modo - se non funziona potresti decodificare il formato PEM (e le parti chiave all'interno del formato PKCS # 8) te stesso. –