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
下表显示了当前定义的标志。
值 | 含义 |
---|---|
|
指示流式处理输出将不具有 PKCS #7) 定义的外部 ContentInfo 包装器 (。 这使得它适合流式传输到封闭消息中。 |
|
指示为对 CryptMsgUpdate 的后续调用提供了分离的数据。 |
|
用于计算要嵌套在信封消息中的消息 的 DER 编码大小。 这在执行流式处理时特别有用。 |
|
非数据类型 内部内容 封装在 OCTET STRING 中。 此标志适用于已签名邮件和信封邮件。 |
[in] dwMsgType
下表显示了当前定义的消息类型。
值 | 含义 |
---|---|
|
字节) 字符串 (八位字节。 |
|
|
|
|
|
未实现。 |
|
|
|
未实现。 |
[in] pvMsgEncodeInfo
指向要编码的数据的指针。 指向的数据类型取决于 dwMsgType 的值。 有关详细信息,请参阅 dwMsgType 表。
[in, optional] pszInnerContentObjID
使用提供给 CryptMsgUpdate 的数据已编码调用 CryptMsgCalculateEncodedLength 时,在 pszInnerContentObjID 中传递相应的对象标识符。 如果 pszInnerContentObjID 为 NULL,则假定 内部内容类型 之前未编码,并且被编码为八进制字符串,并给定类型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 函数。 下表列出了最常返回的错误代码。
返回代码 | 说明 |
---|---|
|
消息类型无效。 |
|
加密算法未知。 |
|
一个或多个参数无效。 |
要求
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |