CMSG_CONTENT_ENCRYPT_INFO結構 (wincrypt.h)
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結構,指定用來加密金鑰的演算法。 如果回呼函式更新pszObjId成員或CRYPT_ALGORITHM_IDENTIFIER結構的Parameters成員,請在dwFlags成員中設定適當的值。 您必須使用 pfnAlloc 和 pfnFree 成員來配置和釋放這些值的記憶體。
pvEncryptionAuxInfo
相依于加密演算法之結構的指標。 下表列出可能的演算法識別碼和對應的成員內容。
值 | 意義 |
---|---|
|
|
|
對於所有其他加密演算法,此值為 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 |