加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用本机C#创建ECC专用/公钥

发布时间:2020-12-16 00:20:03 所属栏目:百科 来源:网络整理
导读:关于如何生成公钥和私钥ECC密钥对,我一直在谷歌和微软的Crypto API上闲逛几个小时. ECDiffieHellmanCng类( http://msdn.microsoft.com/en-us/library/system.security.cryptography.ecdiffiehellmancng.aspx#Y3081)列出了一个示例,但我不知道如何直接访问私
关于如何生成公钥和私钥ECC密钥对,我一直在谷歌和微软的Crypto API上闲逛几个小时. ECDiffieHellmanCng类( http://msdn.microsoft.com/en-us/library/system.security.cryptography.ecdiffiehellmancng.aspx#Y3081)列出了一个示例,但我不知道如何直接访问私钥.

有关该程序的一些背景知识,它是一个C#控制台应用程序,用于管理TrueCrypt会话,AES预共享密钥加密和ECDH / AES加密.我需要一个函数来创建一个公钥/私钥对以保存到文件,然后记录如何在包装的AES加密文件中使用这些生成的密钥(而不是像运行示例所示在运行时生成它).此外,我知道将文件保存到硬盘驱动器时出现的所有漏洞,但我并不担心这个程序,我正在考虑2台客户端计算机是安全的.

另请注意,我不想使用BouncyCastle API.

解决方法

我相信这就是你要找的东西?如果是,请标记为(我的第一个!)答案:-)

其中大部分与CngKey有关,可用于多种变体.

static void test1()
    {
        CngKey k;

        if (CngKey.Exists("myECDH",CngProvider.MicrosoftSoftwareKeyStorageProvider,CngKeyOpenOptions.MachineKey))
        {
            k = CngKey.Open("myECDH",CngKeyOpenOptions.MachineKey);
        }
        else
        {
            k = CngKey.Create(CngAlgorithm.ECDiffieHellmanP256,"myECDH",new CngKeyCreationParameters
        {
            ExportPolicy = CngExportPolicies.AllowPlaintextExport,KeyCreationOptions = CngKeyCreationOptions.MachineKey,KeyUsage = CngKeyUsages.AllUsages,Provider = CngProvider.MicrosoftSoftwareKeyStorageProvider,UIPolicy = new CngUIPolicy(CngUIProtectionLevels.None)
        });
        }

        byte[] privateBytes = k.Export(CngKeyBlobFormat.EccPrivateBlob);
        byte[] publicBytes = k.Export(CngKeyBlobFormat.EccPublicBlob);

        //This:
        var privateTester1 =
            new ECDiffieHellmanCng(CngKey.Import(privateBytes,CngKeyBlobFormat.EccPrivateBlob,CngProvider.MicrosoftSoftwareKeyStorageProvider));

        //Or that:
        var privateTester2 = new ECDiffieHellmanCng(k);
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读