【问题标题】:c# RSA extract public key from private keyc# RSA 从私钥中提取公钥
【发布时间】:2011-07-31 23:24:25
【问题描述】:

有没有办法从 c# 中的私钥中提取公钥?因为如果我这样做ToXMLString(),那么我可以设置是否要使用私钥保存公钥信息。所以现在我在想有没有办法从私钥中提取公钥?

【问题讨论】:

  • 您要从中提取公钥的文件的名称是什么?
  • 它不是一个文件,它实际上是一个 RSACryptoServiceProvider()

标签: c# rsa public-key private-key


【解决方案1】:

RSA 的普通私钥格式包括公钥(“公钥”对于以抵抗定时攻击的方式实现私钥操作很有用)。因此,可以从私钥中提取公钥。

(理论上可以有一个不包括公共指数的“纯 RSA 私钥”,但它有缺点,例如更难防止侧信道攻击,并降低性能。因此没有人在他们的权利请注意这样做。您可以假设当您拥有私钥时,您实际上拥有完整的密钥对。)

在 C#/.NET 标准库中,公共和私有 RSA 密钥可以表示为 XML 字符串(ToXmlString() 和 FromXmlString())或自定义 RSAParameters 结构(ExportParameters() 和 ImportParameters())。如果您可以获得完整的私钥,那么您只需选择公共字段(模数和公共指数),它们共同构成公钥。请注意,RSACryptoServiceProvider 可能是底层 RSA 实现的接口,它可能拒绝导出私钥(但通常会接受导出公钥)。

【讨论】:

  • 谢谢!正是我希望听到的(:
【解决方案2】:

从私钥中取出模数,公共指数最有可能是 65537。到目前为止,我见过的所有 Microsoft 密码系统都使用该指数生成公钥。公共指数和模数的组合就是公钥。

【讨论】:

  • 哦,好吧,这意味着我必须注册我的帐户(:
【解决方案3】:

如果您可以保存它并包含私钥,那么您保存的不仅仅是私钥。

但是,如果您确实只有私钥,那么不,您不能从中“提取”公钥。如果你能做到这一点,你就会使当今的大多数安全性变得过时。

所以基本上,我不相信你只有私钥,你有一个密钥对,你应该能够从中提取公钥。

这在 C# 或 .NET 中是否容易实现,我不知道。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-27
    • 2012-01-02
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2020-04-07
    相关资源
    最近更新 更多