从.NET 4.6开始,@blowdart建议的RSACryptoServiceProvider类型转换不再被推荐,这是一个更大的问题,因为.NET有多个版本(如.NET Core)。 通过这种方式强制转换为RSACryptoServiceProvider,您很可能会遇到此强制转换异常(取决于所使用的平台和库): 无法将类型为“System.Security.Cryptography.RSACng”的对象强制转换为类型“System.Security.Cryptography.RSACryptoServiceProvider” 原因是每个平台的实际实现可能不同,在Windows RSACng上使用。 Here is a link that describes this issue(寻找Jeremy巴顿的答案)。
3条答案
按热度按时间pbossiut1#
以及
证书的公钥或私钥属性上的密钥属性的类型为AsymmetricAlgorithm。
piv4azn72#
推荐的方法是使用
RSA
基类并调用certificate.GetRSAPrivateKey()
。从.NET 4.6开始,@blowdart建议的
RSACryptoServiceProvider
类型转换不再被推荐,这是一个更大的问题,因为.NET有多个版本(如.NET Core)。通过这种方式强制转换为
RSACryptoServiceProvider
,您很可能会遇到此强制转换异常(取决于所使用的平台和库):无法将类型为“System.Security.Cryptography.RSACng”的对象强制转换为类型“System.Security.Cryptography.RSACryptoServiceProvider”
原因是每个平台的实际实现可能不同,在Windows
RSACng
上使用。Here is a link that describes this issue(寻找Jeremy巴顿的答案)。
jobtbby33#
Blowdart的回答确实是正确的,但是,为了清楚起见,我应该指出,如果您希望RSACRyptoServiceProvider示例包含X509证书的公钥和私钥(假设证书确实有私钥),请检查证书的HasPrivateKey属性。
在RSA的情况下,当仅存在公钥时,RSA参数将仅为指数和模数,所有其它参数将为空;另一方面,如果私钥存在,则RSA参数将包含D、DP、DQ、指数、逆Q、模数、P和Q。