C# 用C解密PKCS#7消息#

C# 用C解密PKCS#7消息#,c#,encryption,pkcs#7,C#,Encryption,Pkcs#7,我在EnvelopedCms实例中有一条PKCS#7消息 我还有一个从证书加载的私钥 解密EnvelopedCms.RecipientInfos[0].EncryptedKey(使用私钥)后,是否有办法在托管解密算法中使用会话密钥来解密EnvelopedCms.ContentInfo.Content 注:我不想使用EnvelopedCms.Decrypt(),我知道它存在,但我不想使用它。很容易检查EnvelopedCms.ContentEncryptionAlgorithm.Oid.Frien

我在
EnvelopedCms
实例中有一条PKCS#7消息

我还有一个从证书加载的私钥

解密
EnvelopedCms.RecipientInfos[0].EncryptedKey
(使用私钥)后,是否有办法在托管解密算法中使用会话密钥来解密
EnvelopedCms.ContentInfo.Content


注:我不想使用
EnvelopedCms.Decrypt()
,我知道它存在,但我不想使用它。

很容易检查
EnvelopedCms.ContentEncryptionAlgorithm.Oid.FriendlyName
属性以了解用于加密内容的算法。加密算法由Outlook用户从(选项->信任中心->信任中心设置->电子邮件安全->加密电子邮件->默认设置)中选择。由于加密算法通常是对称算法,因此通常需要密钥大小、块大小、对称性和初始向量。BlockSize的值可以从算法中得知。可以通过算法名称(例如AES256表示密钥大小为256)或通过检查
EnvelopedCms.ContentEncryptionAlgorithm.KeyLength的值来知道密钥大小。对称性由假设给出。初始向量可在
EnvelopedCms.ContentEncryptionAlgorithm.Parameters
中找到

但是,您必须注意内容的填充,否则会引发“数据长度无效”异常。因此,在尝试使用对称密码解密之前,必须对6个字符的填充进行修剪,然而,我没有权威的资源来解释为什么会存在这6个零字符,以及是否可以安全地假设它们总是要修剪。


对于RC2-64算法,KeyLength属性返回0,因此在调用密码之前确保将KeySize属性设置为64。

很容易检查EnvelopedCms.ContentEncryptionAlgorithm.Oid.FriendlyName属性,以了解使用哪个算法加密内容。加密算法由Outlook用户从(选项->信任中心->信任中心设置->电子邮件安全->加密电子邮件->默认设置)中选择。由于加密算法通常是对称算法,因此通常需要密钥大小、块大小、对称性和初始向量。BlockSize的值可以从算法中得知。可以通过算法名称(例如AES256表示密钥大小为256)或通过检查
EnvelopedCms.ContentEncryptionAlgorithm.KeyLength的值来知道密钥大小。对称性由假设给出。初始向量可在
EnvelopedCms.ContentEncryptionAlgorithm.Parameters
中找到

但是,您必须注意内容的填充,否则会引发“数据长度无效”异常。因此,在尝试使用对称密码解密之前,必须对6个字符的填充进行修剪,然而,我没有权威的资源来解释为什么会存在这6个零字符,以及是否可以安全地假设它们总是要修剪。


对于RC2-64算法,KeyLength属性返回0,因此请确保在调用密码之前将KeySize属性设置为64。

为什么要使用
EnvelopedCms.Decrypt()
?在我的情况下,我无法使用EnvelopedCms.Decrypt,因为证书存储在Azure密钥库中。保险库是一个“黑箱”,只能对证书执行基本加密/签名功能为什么要使用
EnvelopedCms.Decrypt()
?在我的情况下,我无法使用EnvelopedCms.Decrypt,因为证书存储在Azure密钥保险库中。保险库是一个“黑箱”,只能对证书执行基本的加密/签名功能