首页 > 解决方案 > 如何在 RSGCng 中加载 CspParams

问题描述

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

            using (var rsa = new RSACryptoServiceProvider(cspParams))
            {
                using(var rsaCng = new RSACng())
                {
                    rsaCng.ImportParameters(rsa.ExportParameters(true));
                    decryptedResult = rsaCng.Decrypt(encryotedText, RSAEncryptionPadding.OaepSHA256)
                }
            }

这是唯一的方法还是我们有任何其他直接的方法来从 rsaCng 对象中的容器名称加载私钥

标签: c#rsarsacryptoserviceprovider

解决方案


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-opening-CAPI 在执行 CAPI 加载时尝试交换然后签名......因为您没有指定您正在使用交换)。


推荐阅读