2017-06-01 11 views
1

Wie kann ich CngKey zu PKCS # 8 mit Verschlüsselung exportieren?Export CngKey in PKCS8 mit Verschlüsselung C#

static void Main(string[] args) 
    { 
     CngKeyCreationParameters ckcParams = new CngKeyCreationParameters() 
     { 
      ExportPolicy = CngExportPolicies.AllowExport, 
      KeyCreationOptions = CngKeyCreationOptions.None, 
      KeyUsage = CngKeyUsages.AllUsages,     
     }; 
     ckcParams.Parameters.Add(new CngProperty("Length", BitConverter.GetBytes(2048), CngPropertyOptions.None)); 

     myCngKey = CngKey.Create(CngAlgorithm.Rsa, "theCngKey", ckcParams); 

     byte[] privatePlainTextBlob = myCngKey.Export(CngKeyBlobFormat.Pkcs8PrivateBlob); 
} 

die ExportPolicy zu AllowPlainTextExport Einstellung kann der Schlüssel exportiert werden, sondern nur im Klartext. Ich möchte einen PCKS8-Blob erstellen, der mit einem symmetrischen Schlüssel verschlüsselt ist.

Dank

Antwort

1

Da CngKey.Export nicht ein Passwort nicht akzeptieren, dann würden Sie müssen manuell P/zu NCryptExportKey Invoke, einen NCRYPTBUFFER_PKCS_SECRET Wert (Unicode/UCS-2 codierte Passwort mit explizitem Nullabschluss) bereitstellt.

http://source.dot.net/#System.Security.Cryptography.Cng/Common/System/Security/Cryptography/ECCng.ImportExport.cs,8b172741466df7a1 kann als Beispiel für den Aufbau der Parameterliste verwendet werden. Das ist kein Spaß.

+0

Danke! Ich hatte damit großen Erfolg. Wenn ich nur einen NCRYPTBUFFER_PKCS_SECRET-Wert habe, ist die Ausgabe identisch mit CngKey.Export(). Es scheint, dass ich auch eine NCRYPTBUFFER_PKCS_ALG_OID und möglicherweise eine NCRYPTBUFFER_PKCS_ALG_PARAM bereitstellen muss. Aber ich kann nirgends finden, was ich für diese Parameter verwenden soll. Ich möchte eine AES256 PKCS8 machen. –

+0

Einige Hinweise hier: https://blog.wingsofhermes.org/?p=166 –