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。
值 | 含义 |
---|---|
|
szOID_OIWSEC_desCBC |
|
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 结构。
pvEncryptionAuxInfo
指向结构的指针,具体取决于加密算法。
值 | 含义 |
---|---|
|
|
|
|
|
|
|
NULL |
cRecipients
rgpRecipients 或 rgCmsRecipients 数组中的元素数。
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 |