2013-05-14 23 views
5

Ich habe seit Jahren versucht, zu finden, wie man einen ECC-Schlüssel von einer Datei von JEDEM Mittel seit Jahren importiert. Ich habe versucht, ein ECC-Zertifikat aus dem Windows-Zertifikatspeicher, aus einer .p12-Datei und aus einer PKCS # 8 OpenSSL-Schlüsseldatei ohne Erfolg zuzugreifen.CNG Import ECC Pub/Priv Schlüssel aus Datei

Nur eines der vielen Dinge, die ich versucht habe, ist:

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); 

Aber keine Discriptive Fehlermeldungen gegeben sind, nur dass die letzte Zeile entweder hat invalid parameters oder im Falle des Codes über An error occurred during encode or decode operation.

Ich verwende die sample program von MSDN für ECDH und altered it, um den GCM-Modus von AES zu verwenden. All dies funktioniert einwandfrei, bis ich versuche, vorgenerierte ECC-Schlüssel anstelle der standardmäßig zur Laufzeit für das Microsoft-Beispiel erstellten Schlüssel zu verwenden. Ich habe zufällig alle CngKeyBlobFormat s versucht, aber um ehrlich zu sein, kann ich nicht sehr gut debuggen, weil ich nicht weiß, wie diese spezifischen Formate in rohen Daten aussehen.

Mein Schlüssel ist in folgendem Format jedoch bin ich bereit, jedes Format zu verwenden, das funktioniert (P12, Microsoft Store, PKCS # 8, etc.)

key.pem

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

Ressourcen

MSDN API and Example: ECDiffieHellmanCng Class

MSDN API: CngKey Class

MSDN Blogs: AES GCM Mode

OpenSSL - Creating ECC keys

Antwort

0

Obwohl dies nicht das einzige Problem sein kann, kann man nicht einfach ASCII eine PEM-Datei verschlüsselt und dann handeln, wie es ein PKCS # 8-kodierten Blob ist. PKCS # 8 ist in ASN.1 spezifiziert, das normalerweise BER/DER-codiert ist. Die PEM-Basis 64 codiert diese binäre Codierung und legt dann eine Kopf- und Fußzeile um die Basis 64, um den Datentyp anzugeben, der codiert wurde.

Beachten Sie, dass die codierten Parameter möglicherweise übersprungen werden müssen. Hoffentlich sind diese Parameter in der Kodierung des privaten Schlüssels vorhanden.

+0

Entschuldigung für die späte Ergänzung, es kann immer noch sehr schwierig sein, CNG zu bekommen, die Schlüssel auf diese Weise zu importieren - wenn es nicht funktioniert, möchten Sie vielleicht das PEM-Format (und die Schlüsselteile innerhalb des PKCS # 8-Formats) dekodieren) dich selber. –