【问题标题】:How do I extract the public key from private key in c#?如何从 c# 中的私钥中提取公钥?
【发布时间】:2015-07-31 07:05:25
【问题描述】:

只有在 pem 文件中有一个私钥,需要从中提取公钥。

目前我正在为此使用 openssl:

openssl rsa -pubout -outform DER

我可以在 c#(和 Bouncycastle)中做同样的事情吗?

【问题讨论】:

  • 嗯?那不是我想发布的根本。抱歉,请尝试链接here。我为奇怪的链接道歉。你会得到this answer 的帮助,然后只设置模数和公共指数吗?
  • 我正在考虑使用 Bouncy Castle 读取 PEM,然后使用 RSAParameters 生成公钥。如果您还想使用 Bouncy 执行 RSA 操作,那么您当然已经完成了第 1 步。

标签: c# rsa bouncycastle


【解决方案1】:

在 Windows 世界中,包含私钥的文件称为 PFX。
因此,您可以尝试使用 .net System.Security.Cryptography 基础架构将证书导入集合:

X509Certificate2Collection collection = new X509Certificate2Collection();
collection.Import(filePath, password, X509KeyStorageFlags.PersistKeySet);

代码块取自这里:
How to retrieve certificates from a pfx file with c#?

【讨论】:

  • 我有一个 pem 文件,其中只包含私钥。
  • @LouisHaußknecht 据我所知,pem 文件是一个专门格式化并包含证书的容器。所以公钥应该在里面。
  • @LouisHaußknecht 顺便说一下,尝试在文本编辑器中打开 pem 文件。可以看到结构,至少我可以在我的测试文件中看到 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- ,所以即使是 new X509Certificate2(filePath)可以获取公钥。
  • @FireAlkazar 同样,我只有一个带有私钥的 pem 文件。
  • @LouisHaußknecht 好的,然后不期待简单的解决方案:stackoverflow.com/a/10216712/1479335
【解决方案2】:

如果您的 .pem 文件已经包含公钥,它通常位于两行之间

-----BEGIN PUBLIC KEY-----

-----END PUBLIC KEY-----

pem 文件。

至少Openssl是这样做的,但你应该仔细检查一下。 有关 pem 文件结构的概述,请参阅 this 链接。

所以你可以使用Substring 方法来获取它。这应该有效:

static void ExtractPublicKeyFromPem(string path)
    {
        var startText = "-----BEGIN PUBLIC KEY-----";
        var endText = "-----END PUBLIC KEY-----";

        var pem = System.IO.File.ReadAllText(path);
        var start = pem.LastIndexOf(startText);
        var end = pem.IndexOf(endText);

        var publicKey = pem.Substring(start, end - start);
    }

希望对你有帮助:)

【讨论】:

  • 我只有一个带有 orivate 密钥的 pem 文件。
  • 那么,为什么不简单地使用 openSsl Runtime 来完成这项工作呢?
猜你喜欢
  • 2012-04-30
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
  • 2019-12-13
  • 2017-12-15
  • 1970-01-01
相关资源
最近更新 更多