EnvelopedCms 邮件

CMS/PKCS #7 提供 EnvelopedCms 类来为邮件进行数字封装。

通过应用称为“数据保密性”的安全服务,对邮件进行“数字封装”,从而保护邮件。

数字信封通过“加密”**帮助确保邮件的保密性。并生成“会话密钥”用于加密邮件。然后,使用收件人的公钥为会话密钥本身进行加密。加密邮件和加密会话密钥组合在一起,构成数字信封。收到邮件后,将使用收件人的私钥为会话密钥解密。然后,使用会话密钥为邮件解密。由于会话密钥是“对称密钥”,所以它既可以为邮件加密,也可以为邮件解密。

在数据保密性要求严格的任何应用程序中使用 EnvelopedCms 类。使用 S/MIME 安全标准的电子邮件是一个说明如何使用 EnvelopedCms 类提供安全性的示例。除了其他安全服务之外,S/MIME 指定了为多个收件人加密电子邮件的能力。数字信封可根据该需要进行定制。

使用 EnvelopedCms 类的一种 Encrypt 方法之一为邮件加密。System.Security.Cryptography.Pkcs.EnvelopedCms.Encrypt(System.Security.Cryptography.Pkcs.CmsRecipient) 方法要求应用程序通过构造 CmsRecipient 对象先设置邮件收件人的特征。CmsRecipient 类存储收件人的 X509 证书以及在邮件发件人和收件人之间建立会话密钥所用的技术。System.Security.Cryptography.Pkcs.EnvelopedCms.Encrypt 方法提供一个对话框,使用户可以选择相应收件人的证书。

EnvelopedCms 类支持为多个收件人封装邮件。在 CmsRecipientCollection 集合中设置收件人组,用作 System.Security.Cryptography.Pkcs.EnvelopedCms.Encrypt(System.Security.Cryptography.Pkcs.CmsRecipientCollection) 方法的输入。

在邮件的发件人和收件人之间建立会话密钥的技术有两种。“密钥传输”**算法通常使用 RSA (https://go.microsoft.com/fwlink/?LinkId=98038https://go.microsoft.com/fwlink/?LinkId=98038) 算法。在该算法中,发件人生成密钥并将其传输给收件人,建立与收件人的共享加密密钥。“密钥协议”**算法通常使用 Diffie-Hellman 密钥协议 (https://go.microsoft.com/fwlink/?LinkId=98039https://go.microsoft.com/fwlink/?LinkId=98039) 算法。在该算法中,双方通过同时参与密钥的生成来建立共享加密密钥,然后按照定义就该密钥达成一致。

有关 EnvelopedCms 邮件的每个收件人的信息在 System.Security.Cryptography.Pkcs.EnvelopedCms.RecipientInfos 属性中提供。有关利用密钥传输算法与发件人建立会话密钥的收件人的信息在 KeyTransRecipientInfo 对象中提供。有关利用密钥协议算法与发件人建立会话密钥的收件人的信息在 KeyAgreeRecipientInfo 对象中提供。

EnvelopedCms 邮件可以包含未受保护的属性。这些属性未加密;不具有数据保密性。这些特性存储在 System.Security.Cryptography.Pkcs.EnvelopedCms.UnprotectedAttributes 属性中。

使用 EnvelopedCms 类的 Decrypt 方法为封装的邮件解密。EnvelopedCms 邮件包含解决所需的收件人标识信息。该信息包含在 RecipientInfos 属性中。

有关使用 EnvelopedCms 邮件的一些代码示例,请参阅使用 System.Security.Cryptography.Pkcs

请参见

任务

如何:为一个收件人封装邮件
如何:为多个收件人封装邮件

参考

CmsRecipient
CmsRecipientCollection
EnvelopedCms
KeyAgreeRecipientInfo
KeyTransRecipientInfo

概念

如何:签名和封装邮件
CMS/PKCS #7 邮件的类型

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。