1

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

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

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

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

4

1 回答 1

1

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

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

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

于 2013-07-29T10:38:12.673 回答