CryptMsgCalculateEncodedLength 函式 (wincrypt.h)

CryptMsgCalculateEncodedLength函式會根據訊息類型、編碼參數,以及要編碼之資料的總長度,計算編碼密碼編譯訊息所需的位元組數目上限。 請注意,結果一律大於或等於所需的實際位元組數目。

語法

DWORD CryptMsgCalculateEncodedLength(
  [in]           DWORD      dwMsgEncodingType,
  [in]           DWORD      dwFlags,
  [in]           DWORD      dwMsgType,
  [in]           void const *pvMsgEncodeInfo,
  [in, optional] LPSTR      pszInnerContentObjID,
  [in]           DWORD      cbData
);

參數

[in] dwMsgEncodingType

指定使用的編碼類型。 將憑證和 訊息編碼類型 與位OR 作業結合在一起,一律可以接受,如下列範例所示:

X509_ASN_ENCODING |PKCS_7_ASN_ENCODING

目前定義的編碼類型如下:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] dwFlags

下表顯示目前定義的旗標。

意義
CMSG_BARE_CONTENT_FLAG
表示串流輸出不會有外部 ContentInfo 包裝函式 (,如 PKCS #7) 所定義。 這可讓它適合串流到封入訊息中。
CMSG_DETACHED_FLAG
指出後續呼叫 CryptMsgUpdate時,會提供中斷連結的資料。
CMSG_CONTENTS_OCTETS_FLAG
用來計算要巢狀在信封訊息內之訊息 的 DER 編碼大小。 執行串流時,這特別有用。
CMSG_CMS_ENCAPSULATED_CONTENT_FLAG
非資料類型 內部內容 會封裝在 OCTET STRING 內。 此旗標適用于已簽署和信封訊息。

[in] dwMsgType

下表顯示目前定義的訊息類型。

意義
CMSG_DATA
八位 (BYTE) 字串。
CMSG_SIGNED

CMSG_SIGNED_ENCODE_INFO

CMSG_ENVELOPED

CMSG_ENVELOPED_ENCODE_INFO

CMSG_SIGNED_AND_ENVELOPED
未實作。
CMSG_HASHED

CMSG_HASHED_ENCODE_INFO

CMSG_ENCRYPTED
未實作。

[in] pvMsgEncodeInfo

要編碼之資料的指標。 所指向的資料類型取決於 dwMsgType的值。 如需詳細資訊,請參閱 dwMsgType 資料表。

[in, optional] pszInnerContentObjID

呼叫 CryptMsgCalculateEncodedLength 時,提供給 CryptMsgUpdate 的資料已經編碼,適當的物件識別碼會在 pszInnerContentObjID中傳遞。 如果 pszInnerContentObjIDNull,則會假設 內部內容類型 不是先前編碼的,並且會編碼為八位字串,並指定類型CMSG_DATA。

使用串流時, pszInnerContentObjID 必須是 Null 或szOID_RSA_data。

通常會使用下列演算法物件識別碼:

  • szOID_RSA_data
  • szOID_RSA_signedData
  • szOID_RSA_envelopedData
  • szOID_RSA_signEnvData
  • szOID_RSA_digestedData
  • szOID_RSA_encryptedData
  • SPC_INDIRECT_DATA_OBJID
使用者可以定義新的 內部內容 使用方式。 使用者必須確保訊息的傳送者和接收者同意與物件識別碼相關聯的語意。

[in] cbData

內容的大小,以位元組為單位。

傳回值

傳回編碼密碼編譯訊息的必要長度。 此長度可能不是確切的長度,但長度不會小於所需的長度。 如果函式失敗,則會傳回零。

若要擷取擴充的錯誤資訊,請使用 GetLastError 函式。 下表列出最常傳回的錯誤碼。

傳回碼 描述
CRYPT_E_INVALID_MSG_TYPE
訊息類型無效。
CRYPT_E_UNKNOWN_ALGO
密碼編譯演算法未知。
E_INVALIDARG
一或多個引數無效。

規格需求

   
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 wincrypt.h
程式庫 Crypt32.lib
Dll Crypt32.dll

另請參閱

CryptMsgOpenToEncode

低階訊息函式

簡化的訊息函式