我正在尝试使用RSA加密和解密一些数据。我查找了RSA
类,但只看到抽象类https://msdn.microsoft.com/en-us/library/system.security.cryptography.rsa(v=vs.110).aspx
我读到DNX5中的RSA类与.net 4.6.1中的RSA类不同,这与我看到的不同吗?如果是,我在哪里可以找到使用该类的文档?而且RSACryptoServiceProvider
似乎在.net核心中不工作,我只能访问RSA
抽象类。
我正在尝试使用RSA加密和解密一些数据。我查找了RSA
类,但只看到抽象类https://msdn.microsoft.com/en-us/library/system.security.cryptography.rsa(v=vs.110).aspx
我读到DNX5中的RSA类与.net 4.6.1中的RSA类不同,这与我看到的不同吗?如果是,我在哪里可以找到使用该类的文档?而且RSACryptoServiceProvider
似乎在.net核心中不工作,我只能访问RSA
抽象类。
2条答案
按热度按时间50pmv0ei1#
如果可以的话,应该避免使用
RSACryptoServiceProvider
。它只在Windows上工作(而且它是Windows上不太好的RSA实现)。坚持使用RSA
基类,并通过RSA.Create()
创建新示例临时密钥(创建)
.NET核心
.NET框架版本〈= 4.7.1
不幸的是,.NET Framework上的RSA.Create()的默认值是RSACryptoServiceProvider,它不考虑set_KeySize。因此,如果您需要临时密钥,则需要在.NET Framework和.NET Core上使用不同的代码:
或者,如果您需要支持4.6(其中不存在RSAng)/ 4.6.2(其中大多数.NET Framework都可以很好地使用RSAng对象而不是RSACryptoServiceProvider对象)之前的版本,则可以继续使用旧的实现:
.NET框架〉= 4.7.2
这里我们有一个重载
Create(Int32)
,它允许指定一个密钥大小,并且在Windows上返回一个现代RSACng
的示例。但是要注意:无参数重载Create()
仍然返回过期的RSACryptoServiceProvider
。临时密钥(导入)
尽管RSACng通常比RSACryptoServiceProvider更易于使用,但RSACryptoServiceProvider在此上下文中应该可以很好地工作,因此RSA.Create()在所有平台上都很好:
从证书:
.NET核心1.0以上版本、.NET框架4.6以上版本
或
.NET框架版本低于4.6
使用命名/持久键(仅限Windows)
我打算包括一些关于RSACryptoServiceProvider(WinXP+/CAPI)和RSACng(Win7+/CNG)创建/打开命名密钥的示例,但这在.NET中并不常见;而且它肯定不是可移植的(对其他操作系统的可移植性是. NETCore的一个更有说服力的论点)。
引用事物。
对于.NET Core 1.0和1.1,您可以从
System.Security.Cryptography.Algorithms
包访问RSA基类。在.NET Core 2.0中,它将包含在netstandard
包引用中。如果你 * 需要 * 与操作系统进行复杂的互操作,你可以引用
System.Security.Cryptography.Cng
(Windows CNG)、System.Security.Cryptography.Csp
(Windows CAPI/CryptoServiceProvider)或System.Security.Cryptography.OpenSsl
(Linux OpenSSL、macOS OpenSSL),并访问支持互操作的类(RSAng、RSACryptoServiceProvider、RSAOpenSsl)。RSA.Create()返回什么?
Create(Int32)
重载,它接受一个键大小,并在Windows上返回一个RSACng
。vfh0ocws2#
您将需要使用dotnetcore库。将
System.Security.Cryptography.Algorithms
Nuget包添加到您的项目中。您可以在此处找到它:System.Security.Cryptography.Algorithms它为您的项目提供了所有常见的算法。
下面是用于Encrypt()和Decrypt()方法的RSACryptoServiceProvider class。