2011-04-07 267 views
2

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

+0

要从中提取公钥的文件的名称是什么? – 2011-04-07 19:29:42

+0

那么它不是一个文件,它实际上是一个RSACryptoServiceProvider() – hs2d 2011-04-07 19:34:09

回答

1

RSA的普通私有密钥格式包括公钥(“公开指数”用于抵抗定时攻击的方式实现私钥操作)。因此,可以从私钥中提取公钥。 (理论上可能有一个“纯粹的RSA私钥”,它不包括公开指数,但它有缺点,比如防止侧向信道攻击的难度更大,并且性能下降。你可以假设当你有私钥时,你实际上拥有完整的密钥对)

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

+0

)谢谢!正是我希望听到的(: – hs2d 2011-04-07 19:33:14

0

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

但是,如果你真的只有私钥,那么不,你不能从中提取公钥。如果你能做到这一点,你会使大多数今天的安全过时。所以基本上,我不相信你只有私钥,你有一个密钥对,你应该能够从中提取公钥。

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

+0

感谢您的回答。 – hs2d 2011-04-07 19:40:28

0

从私钥取模数,公开指数是 - 最可能的 - 65537.迄今为止,我所见过的所有微软密码系统都会生成带有该指数的公钥。公开指数和模数的组合是公钥。

+0

感谢您的回答。 – hs2d 2011-04-07 19:39:00

+0

@ hs2d:在这里,你通过upvoting说“谢谢”。 :) – 2011-04-07 19:43:31

+0

哦,那么,这意味着我必须注册我的帐户(: – hs2d 2011-04-07 19:50:22