Экспорт 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 можно использовать в качестве примера построения списка параметров. Это не весело.