c#RSA从私钥中提取公钥

时间:2011-04-07 19:12:46

标签: c# rsa public-key private-key

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

3 个答案:

答案 0 :(得分:2)

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

(理论上可能有一个“纯RSA私钥”,它不包括公共指数,但它有缺点,例如更难以防止侧通道攻击,并且性能降低。因此没有人在他们的权利这样做。你可以假设,当你拥有私钥时,你实际上拥有完整的密钥对。)

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

答案 1 :(得分:0)

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

但是,如果你确实只有私钥,那么不,你不能从中“提取”公钥。如果你能做到这一点,那么你今天的大部分安全都会过时。

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

在C#或.NET中是否容易实现,我不知道。

答案 2 :(得分:0)

从私钥获取模数,公共指数 - 最有可能 - 65537.到目前为止,我见过的所有Microsoft密码系统都使用该指数生成公钥。公共指数和模数的组合是公钥。