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