C# RSA从私钥中提取公钥

3
有没有办法在C#中从私钥中提取公钥?因为如果我使用ToXMLString(),那么我可以设置是否保存公钥信息与私钥一起。所以现在我在思考有没有办法从私钥中提取公钥?

你想从哪个文件中提取公钥? - Jonas Elfström
这不是一个文件,实际上它是一个RSACryptoServiceProvider()。 - hs2d
3个回答

3
RSA的正常私钥格式包括公钥(“公共指数”用于以抵抗时间攻击的方式实现私钥操作)。因此,可以从私钥中提取公钥。
(理论上可能存在“纯RSA私钥”,其中不包括公共指数,但它具有缺点,例如更难以保护侧信道攻击,并降低性能。因此,没有理智的人会这样做。您可以假设当您拥有私钥时,实际上拥有完整的密钥对。)
在C#/.NET标准库中,公共和私有RSA密钥可以表示为XML字符串(ToXmlString()和FromXmlString())或自定义RSAParameters结构(ExportParameters()和ImportParameters())。如果您可以获取完整的私钥,则只需选择公共字段(模数和公共指数),这些字段一起构成公钥。请注意,RSACryptoServiceProvider可能是底层RSA实现的接口,该实现可能拒绝导出私钥(但通常会接受导出公钥)。

谢谢!正是我希望听到的 (: - hs2d

1
从私钥中取模,公共指数很可能是65537。我迄今为止见过的所有Microsoft加密系统都会生成具有该指数的公钥。公共指数和模数的组合就是公钥。

哦,那意味着我必须注册我的账户(: - hs2d

0

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

然而,如果您确实只有私钥,那么不,您无法从中“提取”公钥。如果您能够做到这一点,那么您将使今天大部分安全措施变得过时。

因此,基本上我不相信您只有私钥,您应该拥有密钥对,并且应该能够从中提取公钥。

无论在C#还是.NET中是否容易实现,我都不知道。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接