有没有办法从 c# 中的私钥中提取公钥?因为如果我这样做了,ToXMLString()
那么我可以设置是否要使用私钥保存公钥信息。所以现在我在想有没有办法从私钥中提取公钥?
3 回答
RSA 的正常私钥格式包括公钥(“公钥”对于以抵抗定时攻击的方式实现私钥操作很有用)。因此,可以从私钥中提取公钥。
(理论上可以有一个不包括公共指数的“纯 RSA 私钥”,但它有缺点,例如更难以防止侧信道攻击,并且性能降低。因此,没有人在他们的头脑中这样做. 您可以假设当您拥有私钥时,您实际上拥有完整的密钥对。)
在 C#/.NET 标准库中,公共和私有 RSA 密钥可以表示为 XML 字符串 ( ToXmlString()
and FromXmlString()
) 或自定义RSAParameters
结构 ( ExportParameters()
and ImportParameters()
)。如果您可以获得完整的私钥,那么您只需选择公共字段(模数和公共指数),它们共同构成公钥。请注意,这RSACryptoServiceProvider
可能是底层 RSA 实现的接口,它可能拒绝导出私钥(但通常会接受导出公钥)。
从私钥中取模,公共指数很可能是 65537。到目前为止,我见过的所有 Microsoft 密码系统都使用该指数生成公钥。公共指数和模数的组合就是公钥。
如果您可以保存它并包含私钥,那么您要保存的不仅仅是私钥。
但是,如果您确实只有私钥,那么不,您不能从中“提取”公钥。如果你能做到这一点,你将使当今的大多数安全性变得过时。
所以基本上,我不相信你只有私钥,你有一个密钥对,你应该能够从中提取公钥。
这是否在 C# 或 .NET 中很容易实现,我不知道。