使用加密c#导出PKCS8中的CngKey

时间:2017-06-01 10:38:24

标签: c# encryption encryption-asymmetric cng

如何通过加密将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允许导出密钥,但仅以纯文本格式导出。我想创建一个用对称密钥加密的PCKS8 blob。

由于

1 个答案:

答案 0 :(得分:1)

由于CngKey.Export不接受密码,您必须手动P / Invoke到NCryptExportKey,提供NCRYPTBUFFER_PKCS_SECRET值(带有显式的Unicode / UCS-2编码密码) null终止符)。

http://source.dot.net/#System.Security.Cryptography.Cng/Common/System/Security/Cryptography/ECCng.ImportExport.cs,8b172741466df7a1可用作构建参数列表的示例。这不好玩。