wincrypt.h) (CMSG_CONTENT_ENCRYPT_INFO 结构

CMSG_CONTENT_ENCRYPT_INFO 结构包含用于加密和导出内容加密密钥的PFN_CMSG_GEN_CONTENT_ENCRYPT_KEYPFN_CMSG_EXPORT_KEY_TRANSPFN_CMSG_EXPORT_KEY_AGREEPFN_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 成员为 FALSEhCryptProv 成员在输入时为 NULL ,则必须通过回调函数更新 hCryptProv 。 如果获取必须释放的提供程序,则必须在 dwFlags 成员中设置CMSG_CONTENT_ENCRYPT_RELEASE_CONTEXT_FLAG

ContentEncryptionAlgorithm

指定用于加密密钥的算法 的CRYPT_ALGORITHM_IDENTIFIER 结构。 如果回调函数更新CRYPT_ALGORITHM_IDENTIFIER结构的 pszObjId 成员或 Parameters 成员,请在 dwFlags 成员中设置适当的值。 必须使用 pfnAlloc 和 pfnFree 成员为这些值分配和释放内存

pvEncryptionAuxInfo

指向依赖于加密算法的 结构的指针。 下表列出了可能的算法 ID 和相应的成员内容。

含义
RC2

CMSG_RC2_AUX_INFO

RC4

CMSG_RC4_AUX_INFO

 

对于所有其他加密算法,此值为 NULL

cRecipients

一个 值,该值指定邮件的收件人数。

rgCmsRecipients

指向包含邮件收件人信息的 CMSG_RECIPIENT_ENCODE_INFO 结构的数组的指针。

pfnAlloc

指向用于为更新成员分配内存的可安装函数的指针。

pfnFree

指向用于释放 pfnAlloc 分配的内存的可安装函数的指针。

dwEncryptFlags

一个 值,该值指示是否应用零填充编码的输出,以获取 CryptMsgCalculateEncodedLengthCryptMsgOpenToEncode 函数中确定长度流式处理所需的一致最大长度。

CMSG_CONTENT_ENCRYPT_PAD_ENCODED_LEN_FLAG (0x00000001)

DUMMYUNIONNAME

DUMMYUNIONNAME.hContentEncryptKey

fCNG 成员为 FALSE 时的内容加密密钥的句柄。

DUMMYUNIONNAME.hCNGContentEncryptKey

当 fCNG 成员为 TRUE 时,内容加密密钥的句柄。

dwFlags

一个 值,该值指示是否必须为 hCryptProvContentEncryptionAlgorithm 成员释放内存。

含义
CMSG_CONTENT_ENCRYPT_FREE_PARA_FLAG
0x00000001
如果回调函数更新 ContentEncryptionAlgorithm 成员引用的 CRYPT_ALGORITHM_IDENTIFIER 结构的 Parameters 成员,则设置 。
CMSG_CONTENT_ENCRYPT_FREE_OBJID_FLAG
0x00000002
如果回调函数更新 contentEncryptionAlgorithm 成员引用的 CRYPT_ALGORITHM_IDENTIFIER 结构的 pszObjId 成员,则设置 。
CMSG_CONTENT_ENCRYPT_RELEASE_CONTEXT_FLAG
0x00008000
如果回调函数获取必须释放的 hCryptProv 成员,则设置 。

fCNG

一个 值,该值指示是否使用 加密 API:下一代 (CNG) 提供程序来生成内容加密密钥。

如果 fCNG 成员为 FALSE,则调用 CMSG_OID_GEN_CONTENT_ENCRYPT_KEY_FUNC 函数以更新 hContentEncryptKey 成员。

如果 fCNG 成员为 TRUE,则调用 CMSG_OID_CNG_GEN_CONTENT_ENCRYPT_KEY_FUNC 函数以更新 hCNGContentEncryptKeycbContentEncryptKey 成员, pbCNGContentEncryptKeyObjectpbContentEncryptKey 成员必须由 pfnAlloc 成员分配。 通过调用 CryptMsgClose 函数释放并释放内容加密密钥。

pbCNGContentEncryptKeyObject

指向包含 CNG 内容加密密钥的缓冲区的指针。

pbContentEncryptKey

指向包含 CAPI1 内容加密密钥的缓冲区的指针。

cbContentEncryptKey

pbCNGContentEncryptKeyObjectpbContentEncryptKey 成员的大小(以字节为单位),具体取决于 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

另请参阅

PFN_CMSG_EXPORT_KEY_AGREE

PFN_CMSG_EXPORT_KEY_TRANS

PFN_CMSG_EXPORT_MAIL_LIST

PFN_CMSG_GEN_CONTENT_ENCRYPT_KEY