Экспорт CngKey в PKCS8 с шифрованием C#

Как я могу экспортировать CngKey в PKCS#8 с шифрованием?

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

Установка ExportPolicy в AllowPlainTextExport позволяет экспортировать ключ, но только в виде простого текста. Я хотел бы создать BLOB-объект PCKS8, который шифруется симметричным ключом.

Спасибо

1 ответ

Поскольку CngKey.Export не принимает пароль, вам придется вручную P/Invoke для NCryptExportKey, предоставляя значение NCRYPTBUFFER_PKCS_SECRET (пароль в кодировке Unicode/UCS-2 с явным нулевым терминатором).

http://source.dot.net/#System.Security.Cryptography.Cng/Common/System/Security/Cryptography/ECCng.ImportExport.cs,8b172741466df7a1 можно использовать в качестве примера построения списка параметров. Это не весело.

Другие вопросы по тегам