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
指示流式处理输出将不具有 PKCS #7) 定义的外部 ContentInfo 包装器 (。 这使得它适合流式传输到封闭消息中。
CMSG_DETACHED_FLAG
指示为对 CryptMsgUpdate 的后续调用提供了分离的数据。
CMSG_CONTENTS_OCTETS_FLAG
用于计算要嵌套在信封消息中的消息 的 DER 编码大小。 这在执行流式处理时特别有用。
CMSG_CMS_ENCAPSULATED_CONTENT_FLAG
非数据类型 内部内容 封装在 OCTET STRING 中。 此标志适用于已签名邮件和信封邮件。

[in] dwMsgType

下表显示了当前定义的消息类型。

含义
CMSG_DATA
字节) 字符串 (八位字节。
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

使用提供给 CryptMsgUpdate 的数据已编码调用 CryptMsgCalculateEncodedLength 时,在 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
Library Crypt32.lib
DLL Crypt32.dll

另请参阅

CryptMsgOpenToEncode

低级别消息函数

简化的消息函数