C# 如何使用EnvelopedCms类解密数据,在多个证书存储中搜索证书?

C# 如何使用EnvelopedCms类解密数据,在多个证书存储中搜索证书?,c#,pkcs#7,smime,C#,Pkcs#7,Smime,我正在将使用互操作和本机调用编写的现有C#代码转换为100%托管代码。代码是API库,它允许调用者通过传递加密数据和用于搜索证书的证书存储阵列来解密S/MIME消息 使用Win32 API(由我正在处理的API库的当前实现使用),cryptdecyptmessage接受CRYPT\u DECRYPT\u MESSAGE\u PARA结构,该结构允许我指定要搜索的证书存储阵列(rghCertStore字段)。我不知道如何用EnvelopedCms类重现相同的内容 EnvelopedCms.Decr

我正在将使用互操作和本机调用编写的现有C#代码转换为100%托管代码。代码是API库,它允许调用者通过传递加密数据和用于搜索证书的证书存储阵列来解密
S/MIME
消息

使用Win32 API(由我正在处理的API库的当前实现使用),
cryptdecyptmessage
接受
CRYPT\u DECRYPT\u MESSAGE\u PARA
结构,该结构允许我指定要搜索的证书存储阵列(
rghCertStore
字段)。我不知道如何用
EnvelopedCms
类重现相同的内容


EnvelopedCms.Decrypt
方法重载允许我指定要搜索的证书集合,但我需要能够指定证书存储的集合。有可能吗?

看看这个,可能有helpful@PavelAnikhouski谢谢如果我是正确的,在这个线程中,他们只是用一个商店中的所有证书填充证书集合,然后将这个集合传递给EnvelopedCms。听起来有点过分了。我最好不要只是为了让解密方法完成它的工作而读取每个存储区的所有证书(就像我在Win32 API的情况下不需要这样做一样)。Win32 API可以在幕后完成这项工作。您只能填充必要的证书,而不能填充所有证书them@PavelAnikhouski我想Win32是以一种更高效的方式实现的。不,我不能只填充必要的证书。我的代码是一个库,不是一个最终用户软件,我不知道调用方通过“必要的证书”假设了什么。我的代码约定是,我必须将证书存储集合作为输入。我不允许破坏API。因此,在这种情况下,我必须从每个存储中读取所有证书(如果没有其他路径)。收集额外证书是唯一不需要分叉代码的方法。看看这个,它可能是helpful@PavelAnikhouski谢谢如果我是正确的,在这个线程中,他们只是用一个商店中的所有证书填充证书集合,然后将这个集合传递给EnvelopedCms。听起来有点过分了。我最好不要只是为了让解密方法完成它的工作而读取每个存储区的所有证书(就像我在Win32 API的情况下不需要这样做一样)。Win32 API可以在幕后完成这项工作。您只能填充必要的证书,而不能填充所有证书them@PavelAnikhouski我想Win32是以一种更高效的方式实现的。不,我不能只填充必要的证书。我的代码是一个库,不是一个最终用户软件,我不知道调用方通过“必要的证书”假设了什么。我的代码约定是,我必须将证书存储集合作为输入。我不允许破坏API。因此,在这种情况下,我必须读取每个存储中的所有证书(如果没有其他路径的话)。收集额外的证书是避免代码分叉的唯一方法。