在.Net Core上使用非对称密钥

MHu*_*ugh 3 cryptography rsa .net-core

我正在尝试从此示例运行代码

https://docs.microsoft.com/en-us/dotnet/standard/security/how-to-store-asymmetric-keys-in-a-key-container
Run Code Online (Sandbox Code Playgroud)

在.NetCore 2.0(Web应用程序)下。

但是当我尝试使用执行任何行时

CspParameters
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

'CspParameters' requires Windows Cryptographic API (CAPI), which is not available on this platform.
Run Code Online (Sandbox Code Playgroud)

请提出有关我如何解决此问题的建议。谢谢。

bar*_*njs 6

.NET不存储加密密钥,它最终是(或不)由其构建的加密平台提供的功能。

要将CspParameters与.NET Core一起使用,您必须在Windows上运行;因为那是(旧的)Windows加密API的非常薄的包装。您不能在UAP中使用它,因为UAP仅允许使用较新的加密技术:下一代(CNG)API。

macOS可以将密钥存储在钥匙串中,但是.NET Core不提供用于读取密钥的API。

Linux(OpenSSL)除了“将其保存到文件并再次加载”之外没有任何密钥存储机制,但是.NET Core不支持从文件加载非对称密钥。

在跨平台机制中实现目标的唯一方法是使非对称密钥与X.509证书关联。如果您构建的X509Certificate2对象HasPrivateKey返回了true,则可以将其保存到PFX / PKCS#12文件,然后从该文件加载。或者,您可以将其添加到X509Store实例(CurrentUser的“我的”存储是在各个平台上最有效的存储),然后从X509Store实例读回。

尽管您引用的页面声称是在2017年编写的,但真正的含义是该内容于该日期从其先前在msdn.microsoft.com的位置移动。原始页面写于2008年(至少,这是对web.archive.org的首次访问),因此它早于.NET Core。