c# - 使用 native C# 创建 ECC 私钥/公钥

标签 c# cryptography elliptic-curve

我已经在 Google 和 Microsoft 的 Crypto API 上搜索了数小时,以了解如何生成公钥和私钥 ECC key 对。 ECDiffieHellmanCng 类 ( http://msdn.microsoft.com/en-us/library/system.security.cryptography.ecdiffiehellmancng.aspx#Y3081 ) 列出了一个示例,但我不知道如何直接访问私钥。

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

另请注意,我不想使用 BouncyCaSTLe API。

最佳答案

其中大部分与 CngKey 相关,可以在许多变体中使用。

    static void test1()
    {
        CngKey k;

        if (CngKey.Exists("myECDH", CngProvider.MicrosoftSoftwareKeyStorageProvider, CngKeyOpenOptions.MachineKey))
        {
            k = CngKey.Open("myECDH", CngProvider.MicrosoftSoftwareKeyStorageProvider, 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);
    }

关于c# - 使用 native C# 创建 ECC 私钥/公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10264770/

相关文章:

c# - C#套接字实现比较

c# - 如何使 WPF 数据网格的第一行成为自动添加新行的行

database - Erlang 中的文本压缩

Windows CNG ECDH secret 协议(protocol)结构

c# - 我如何将一个非常大的数字提升到一个非常大的幂?

c# - 使用命令筛选器在 Visual Studio 扩展中随机崩溃

rust - Rust 中的 HMAC-SHA1

cryptography - 使用帐户名作为盐

java - Android 无法创建 EC KeyPair

c - 使用 C 中的 Miracle Library 进行 ECC 加密