C# 如何在RSGCng中加载CspParams

C# 如何在RSGCng中加载CspParams,c#,rsa,rsacryptoserviceprovider,C#,Rsa,Rsacryptoserviceprovider,我们正在尝试使用RSACng对象中的CSParams从容器名称加载私钥。我们看不到直接加载它的方法,目前我们正在执行下面的解决方法,以从RSACryptServiceProvider加载它,如下所示 using (var rsa = new RSACryptoServiceProvider(cspParams)) { using(var rsaCng = new RSACng()) {

我们正在尝试使用RSACng对象中的CSParams从容器名称加载私钥。我们看不到直接加载它的方法,目前我们正在执行下面的解决方法,以从RSACryptServiceProvider加载它,如下所示

            using (var rsa = new RSACryptoServiceProvider(cspParams))
            {
                using(var rsaCng = new RSACng())
                {
                    rsaCng.ImportParameters(rsa.ExportParameters(true));
                    decryptedResult = rsaCng.Decrypt(encryotedText, RSAEncryptionPadding.OaepSHA256)
                }
            }
这是唯一的方法,还是我们有其他直接的方法从rsaCng对象中的容器名称加载私钥

CngProvider provider = new CngProvider("Microsoft Enhanced RSA and AES Cryptographic Provider");
using (CngKey key = CngKey.Open(containerName, provider))
using (RSA rsa = new RSACng(key))
{
    ...
}

如果可以的话,唯一让人困惑的是当您使用CAPI功能时,即使用具有相同名称的不同签名密钥和交换密钥(CNG打开CAPI tríes交换,然后在进行CAPI加载时签名…因为您没有指定您使用的是交换).

您在CSParameters上设置了什么属性?@bartonjs只是KeyContainerName var csParams=new CspParameters{KeyContainerName=containerName};谢谢@bartonjs的帮助。它也可以在开放方法中不提供提供者和containerName。此处提供方或任何相关文件的意义是什么?有关此特定提供商、Microsoft增强RSA和AES加密服务的任何见解Provider@TryingStuff这只意味着默认的提供程序(Microsoft软件密钥存储提供程序)会回到CAPI中的软件提供程序名称。我使用的提供者名称是默认的CAPI提供者,如果您阅读现有RSACryptServiceProvider密钥上的CspKeyContainerInfo属性,您可能会将其视为PrpviderName。感谢@bartonjs的澄清