【问题标题】:Export CngKey in PKCS8 with encryption c#使用加密c#在PKCS8中导出CngKey
【发布时间】:2017-11-02 11:17:13
【问题描述】:

如何通过加密将 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。

谢谢

【问题讨论】:

    标签: c# encryption encryption-asymmetric cng


    【解决方案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 可以用作构建参数列表的示例。不好玩。

    【讨论】:

    • 谢谢!我在这方面取得了巨大的成功。当我只有一个 NCRYPTBUFFER_PKCS_SECRET 值时,输出与 CngKey.Export() 相同。看来我还需要提供 NCRYPTBUFFER_PKCS_ALG_OID 和可能的 NCRYPTBUFFER_PKCS_ALG_PARAM。但是我在任何地方都找不到我应该为这些参数使用的东西。我想做一个 AES256 PKCS8。
    猜你喜欢
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    相关资源
    最近更新 更多