RSA从私钥中提取公钥

本文关键字:提取 公钥 私钥 RSA | 更新日期: 2023-09-27 17:49:38

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

RSA从私钥中提取公钥

RSA的正常私钥格式包括公钥("公共指数"对于实现私钥操作很有用,可以抵抗定时攻击)。因此,可以从私钥中提取公钥。

(理论上可以有一个不包括公共指数的"纯RSA私钥",但它有缺点,例如更难以防止侧通道攻击,并且降低了性能。因此,没有哪个头脑正常的人会这么做。您可以假设,当您拥有私钥时,您实际上拥有完整的密钥对。

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

从私钥中取模数,公共指数很可能是65537。到目前为止,我所见过的所有微软密码系统都会生成带有该指数的公钥。公共指数和模数的组合就是公钥

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

但是,如果您确实只有私钥,那么不行,您不能从中"提取"公钥。如果你能做到这一点,你将使今天的大多数安全过时。

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

这在c#或。net中是否容易实现,我不知道。