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