CMSG_ENVELOPED_ENCODE_INFO 结构 (wincrypt.h)

CMSG_ENVELOPED_ENCODE_INFO结构包含对信封邮件进行编码所需的信息。 如果 dwMsgType 参数CMSG_ENVELOPED,则会将其传递给 CryptMsgOpenToEncode

语法

typedef struct _CMSG_ENVELOPED_ENCODE_INFO {
  DWORD                       cbSize;
  HCRYPTPROV_LEGACY           hCryptProv;
  CRYPT_ALGORITHM_IDENTIFIER  ContentEncryptionAlgorithm;
  void                        *pvEncryptionAuxInfo;
  DWORD                       cRecipients;
  PCERT_INFO                  *rgpRecipients;
  PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
  DWORD                       cCertEncoded;
  PCERT_BLOB                  rgCertEncoded;
  DWORD                       cCrlEncoded;
  PCRL_BLOB                   rgCrlEncoded;
  DWORD                       cAttrCertEncoded;
  PCERT_BLOB                  rgAttrCertEncoded;
  DWORD                       cUnprotectedAttr;
  PCRYPT_ATTRIBUTE            rgUnprotectedAttr;
} CMSG_ENVELOPED_ENCODE_INFO, *PCMSG_ENVELOPED_ENCODE_INFO;

成员

cbSize

此结构的大小(以字节为单位)。

hCryptProv

此成员未使用,应设置为 NULL

Windows Server 2003 和 Windows XP: 指定 加密服务提供程序 的句柄, (CSP) 用于执行内容加密、收件人密钥加密和导出。 不使用 hCryptProv 的私钥。

此成员的数据类型为 HCRYPTPROV

除非有充分的理由在 hCryptProv 中传入特定的加密提供程序,否则请传递零以使用默认 RSA 或 DSS 提供程序。

ContentEncryptionAlgorithm

一个 CRYPT_ALGORITHM_IDENTIFIER 结构,包含签名算法类型和编码格式中任何关联的附加参数。

结构的 pszObjId 成员指定用于加密消息内容的算法。

以下加密算法需要在结构的 Parameters 成员中 (IV) 编码的 8 字节初始化向量。 有关详细信息,请参阅 CryptSetKeyParam

含义
CALG_DES
szOID_OIWSEC_desCBC
CALG_3DES
szOID_RSA_DES_EDE3_CBC
 

如果 Parameters 成员的 cbData 成员为零,则使用 CryptGenRandom 生成包含 IV 的抽象语法表示法 One (ASN.1) 编码的 OCTET STRING。

szOID_RSA_RC2CBC (CALG_RC2) 算法要求参数pbData 成员是编码CRYPT_RC2_CBC_PARAMETERS结构。 如果 Parameters 成员的 cbData 成员为零,则会为 dwVersion 成员生成一个 ASN.1 编码CRYPT_RC2_CBC_PARAMETERS,默认值为 40。 这会将默认密钥长度设置为 40 位。 可以使用 pvEncryptionAuxInfo 重写此默认密钥长度,该对象指向包含所需密钥长度 的CMSG_RC2_AUX_INFO 结构。

注意 在解密时,如果存在 IV,则会在解密开始之前使用 IV 调用 CryptSetKeyParam
 

pvEncryptionAuxInfo

指向结构的指针,具体取决于加密算法。

含义
RC2

CMSG_RC2_AUX_INFO

RC4

CMSG_RC4_AUX_INFO

SP3 或兼容

CMSG_SP3_COMPATIBLE_AUX_INFO

所有其他加密算法
NULL

cRecipients

rgpRecipientsrgCmsRecipients 数组中的元素数。

rgpRecipients

指向 CERT_INFO 结构的指针数组,每个结构都包含收件人的证书颁发者、SerialNumber 和 SubjectPublicKeyInfo。 此数组只能用于由其颁发者和序列号标识的收件人。 如果 rgpRecipients 不为 NULL则 rgCmsRecipients 必须为 NULL

rgCmsRecipients

可选。 指向包含收件人信息的 CMSG_RECIPIENT_ENCODE_INFO 结构的指针数组。 如果 rgCmsRecipients 不是 NULL则 rgpRecipients 必须为 NULL。 必须定义CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS才能引用此字段。

cCertEncoded

可选。 一个 DWORD 值,指示 rgCertEncoded 数组中编码的证书数。 必须定义CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS才能引用此字段。

rgCertEncoded

可选。 CERT_BLOB结构的数组。 必须定义CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS才能引用此字段。

cCrlEncoded

可选。 一个 DWORD 值,该值指示 rgCRLEncoded 数组中) (CRL 的编码证书吊销列表的数目。 必须定义CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS才能引用此字段。

rgCrlEncoded

可选。 CRL_BLOB 结构的数组。 必须定义CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS才能引用此字段。

cAttrCertEncoded

可选。 一个 DWORD 值,该值指示 rgAttrCertEncoded 数组中编码的证书属性的数目。 必须定义CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS才能引用此字段。

rgAttrCertEncoded

可选。 CRYPT_ATTRIBUTE结构的数组。 必须定义CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS才能引用此成员。

cUnprotectedAttr

可选。 一个 DWORD 值,该值指示 rgUnprotectedAttr 数组中未受保护的属性的数目。 必须定义CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS才能引用此字段。

rgUnprotectedAttr

可选。 CRYPT_ATTRIBUTE结构的数组。 必须定义CMSG_ENVELOPED_ENCODE_INFO_HAS_CMS_FIELDS才能引用此字段。

要求

   
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 wincrypt.h

另请参阅

CERT_INFO

CRYPT_ALGORITHM_IDENTIFIER