wincrypt.h) (CMSG_CONTENT_ENCRYPT_INFO 结构
CMSG_CONTENT_ENCRYPT_INFO 结构包含用于加密和导出内容加密密钥的PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY、PFN_CMSG_EXPORT_KEY_TRANS、PFN_CMSG_EXPORT_KEY_AGREE和PFN_CMSG_EXPORT_MAIL_LIST函数之间共享的信息,可以使用加密 API:下一代 (CNG) 对象标识符 (OID) 进行安装。
语法
typedef struct _CMSG_CONTENT_ENCRYPT_INFO {
DWORD cbSize;
HCRYPTPROV_LEGACY hCryptProv;
CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
void *pvEncryptionAuxInfo;
DWORD cRecipients;
PCMSG_RECIPIENT_ENCODE_INFO rgCmsRecipients;
PFN_CMSG_ALLOC pfnAlloc;
PFN_CMSG_FREE pfnFree;
DWORD dwEncryptFlags;
union {
HCRYPTKEY hContentEncryptKey;
BCRYPT_KEY_HANDLE hCNGContentEncryptKey;
} DUMMYUNIONNAME;
DWORD dwFlags;
BOOL fCNG;
BYTE *pbCNGContentEncryptKeyObject;
BYTE *pbContentEncryptKey;
DWORD cbContentEncryptKey;
} CMSG_CONTENT_ENCRYPT_INFO, *PCMSG_CONTENT_ENCRYPT_INFO;
成员
cbSize
此结构的大小(以字节为单位)。
hCryptProv
CSP) (加密服务提供程序 的句柄。 如果 fCNG 成员为 FALSE 且 hCryptProv 成员在输入时为 NULL ,则必须通过回调函数更新 hCryptProv 。 如果获取必须释放的提供程序,则必须在 dwFlags 成员中设置CMSG_CONTENT_ENCRYPT_RELEASE_CONTEXT_FLAG。
ContentEncryptionAlgorithm
指定用于加密密钥的算法 的CRYPT_ALGORITHM_IDENTIFIER 结构。 如果回调函数更新CRYPT_ALGORITHM_IDENTIFIER结构的 pszObjId 成员或 Parameters 成员,请在 dwFlags 成员中设置适当的值。 必须使用 pfnAlloc 和 pfnFree 成员为这些值分配和释放内存。
pvEncryptionAuxInfo
指向依赖于加密算法的 结构的指针。 下表列出了可能的算法 ID 和相应的成员内容。
值 | 含义 |
---|---|
|
|
|
对于所有其他加密算法,此值为 NULL。
cRecipients
一个 值,该值指定邮件的收件人数。
rgCmsRecipients
指向包含邮件收件人信息的 CMSG_RECIPIENT_ENCODE_INFO 结构的数组的指针。
pfnAlloc
指向用于为更新成员分配内存的可安装函数的指针。
pfnFree
指向用于释放 pfnAlloc 分配的内存的可安装函数的指针。
dwEncryptFlags
一个 值,该值指示是否应用零填充编码的输出,以获取 CryptMsgCalculateEncodedLength 或 CryptMsgOpenToEncode 函数中确定长度流式处理所需的一致最大长度。
CMSG_CONTENT_ENCRYPT_PAD_ENCODED_LEN_FLAG (0x00000001)
DUMMYUNIONNAME
DUMMYUNIONNAME.hContentEncryptKey
fCNG 成员为 FALSE 时的内容加密密钥的句柄。
DUMMYUNIONNAME.hCNGContentEncryptKey
当 fCNG 成员为 TRUE 时,内容加密密钥的句柄。
dwFlags
一个 值,该值指示是否必须为 hCryptProv 或 ContentEncryptionAlgorithm 成员释放内存。
值 | 含义 |
---|---|
|
如果回调函数更新 ContentEncryptionAlgorithm 成员引用的 CRYPT_ALGORITHM_IDENTIFIER 结构的 Parameters 成员,则设置 。 |
|
如果回调函数更新 contentEncryptionAlgorithm 成员引用的 CRYPT_ALGORITHM_IDENTIFIER 结构的 pszObjId 成员,则设置 。 |
|
如果回调函数获取必须释放的 hCryptProv 成员,则设置 。 |
fCNG
一个 值,该值指示是否使用 加密 API:下一代 (CNG) 提供程序来生成内容加密密钥。
如果 fCNG 成员为 FALSE,则调用 CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC 函数以更新 hContentEncryptKey 成员。
如果 fCNG 成员为 TRUE,则调用 CMSG_OID_CNG_GEN_CONTENT_ENCRYPT_KEY_FUNC 函数以更新 hCNGContentEncryptKey 和 cbContentEncryptKey 成员, pbCNGContentEncryptKeyObject 和 pbContentEncryptKey 成员必须由 pfnAlloc 成员分配。 通过调用 CryptMsgClose 函数释放并释放内容加密密钥。
pbCNGContentEncryptKeyObject
指向包含 CNG 内容加密密钥的缓冲区的指针。
pbContentEncryptKey
指向包含 CAPI1 内容加密密钥的缓冲区的指针。
cbContentEncryptKey
pbCNGContentEncryptKeyObject 或 pbContentEncryptKey 成员的大小(以字节为单位),具体取决于 fCNG 成员的值。
注解
在将 dwMsgType 参数设置为 CMSG_ENVELOPED 的情况下调用时, CryptMsgOpenToEncode 函数从 CMSG_ENVELOPED_ENCODE_INFO 结构初始化 CMSG_CONTENT_ENCRYPT_INFO 结构。
如果 CMSG_ENVELOPED_ENCODE_INFO 结构使用 rgpRecipients 成员而不是 rgCmsRecipients 成员, CryptMsgOpenToEncode 函数会将 rgpRecipients 成员结构转换为 CMSG_CONTENT_ENCRYPT_INFO 结构的 rgCmsRecipients 成员 的CMSG_RECIPIENT_ENCODE_INFO 结构。
当 fCNG 成员为 FALSE 时,可以在 CMSG_CONTENT_ENCRYPT_INFO 结构中更改以下成员:
- hContentEncryptKey
- hCryptProv
- contentEncryptionAlgorithm 成员引用的 CRYPT_ALGORITHM_IDENTIFIER 结构的 pszObjId 成员
- ContentEncryptionAlgorithm 成员引用的 CRYPT_ALGORITHM_IDENTIFIER 结构的 Parameters 成员
- dwFlags
当 fCNG 成员为 TRUE 时,可以在 CMSG_CONTENT_ENCRYPT_INFO 结构中更改以下成员:
- hCNGContentEncryptKey
- pbCNGContentEncryptKeyObject
- pbContentEncryptKey
- cbContentEncryptKey
- contentEncryptionAlgorithm 成员引用的 CRYPT_ALGORITHM_IDENTIFIER 结构的 pszObjId 成员
- ContentEncryptionAlgorithm 成员引用的 CRYPT_ALGORITHM_IDENTIFIER 结构的 Parameters 成员
- dwFlags
以下成员为只读:
- cbSize
- pvEncryptionAuxInfo
- cRecipients
- rgCmsRecipients
- pfnAlloc
- pfnFree
- dwEncryptFlags
要求
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
标头 | wincrypt.h |