2017-06-01 6 views
1

Comment puis-je exporter CngKey à PKCS # 8 avec cryptage?Export CngKey dans PKCS8 avec cryptage 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); 
} 

Réglage du ExportPolicy à AllowPlainTextExport permet à la clé à exporter, mais seulement dans le texte brut. Je voudrais créer un blob PCKS8 qui est crypté avec une clé symétrique.

Merci

Répondre

1

Depuis CngKey.Export n'accepte pas un mot de passe, vous auriez manuellement P/Invoke pour NCryptExportKey, fournissant une valeur NCRYPTBUFFER_PKCS_SECRET (Unicode/UCS-2 mot de passe codé avec terminaison null explicite).

http://source.dot.net/#System.Security.Cryptography.Cng/Common/System/Security/Cryptography/ECCng.ImportExport.cs,8b172741466df7a1 peut être utilisé comme exemple de construction de la liste de paramètres. Ce n'est pas amusant.

+0

Merci! J'ai eu beaucoup de succès avec ça. Lorsque j'ai juste une valeur NCRYPTBUFFER_PKCS_SECRET, la sortie est identique à CngKey.Export(). Il semblerait que j'ai également besoin de fournir un NCRYPTBUFFER_PKCS_ALG_OID et éventuellement un NCRYPTBUFFER_PKCS_ALG_PARAM. Mais je ne trouve nulle part ce que je devrais utiliser pour ces paramètres. Je veux faire un AES256 PKCS8. –

+0

Quelques indices ici: https://blog.wingsofhermes.org/?p=166 –