CryptEncodeObject 函数 (wincrypt.h)

CryptEncodeObject 函数对由 lpszStructType 参数的值指示的类型结构进行编码。 建议将 CryptEncodeObjectEx 用作执行相同功能的 API,但性能显著提高。

语法

BOOL CryptEncodeObject(
  [in]      DWORD      dwCertEncodingType,
  [in]      LPCSTR     lpszStructType,
  [in]      const void *pvStructInfo,
  [out]     BYTE       *pbEncoded,
  [in, out] DWORD      *pcbEncoded
);

参数

[in] dwCertEncodingType

使用的编码类型。 始终可以通过将证书和 消息编码类型 与按位 OR 操作结合使用来指定它们,如以下示例所示:

X509_ASN_ENCODING |PKCS_7_ASN_ENCODING

当前定义的编码类型为:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING
注意 需要证书或 消息编码类型 。 X509_ASN_ENCODING为默认值。 如果指示了该类型,则使用该类型。 否则,如果指示PKCS7_ASN_ENCODING类型,则使用该类型。
 

[in] lpszStructType

指向定义结构类型的 OID 的指针。 如果 lpszStructType 参数的高序字为零,则低序字将指定指定结构的类型的整数标识符。 否则,此参数是指向以 null 结尾的字符串的长指针。

有关对象标识符字符串、其预定义常量和相应结构的详细信息,请参阅 CryptEncodeObject 和 CryptDecodeObject 的常量

[in] pvStructInfo

指向要编码的结构的指针。 结构必须是 lpszStructType 指定的类型。

[out] pbEncoded

指向要接收编码结构的缓冲区的指针。 当指定的缓冲区不够大,无法接收解码结构时,函数将设置ERROR_MORE_DATA代码,并将所需的缓冲区大小(以字节为单位)存储在 由ERROR_MORE_DATA Encoded 指向的变量中。

此参数可以为 NULL ,用于检索此信息的大小以进行内存分配。 有关详细信息,请参阅 检索长度未知的数据

[in, out] pcbEncoded

指向 DWORD 变量的指针,该变量包含 pbEncoded 参数指向的缓冲区的大小(以字节为单位)。 函数返回时, DWORD 值包含缓冲区中存储的已分配编码字节数。

注意 处理缓冲区中返回的数据时,应用程序必须使用返回的数据的实际大小。 实际大小可以略小于输入时指定的缓冲区的大小。 (输入时,缓冲区大小通常指定得足够大,以确保最大的输出数据适合 buffer。) 输出时,此参数指向的变量将更新,以反映复制到缓冲区的数据的实际大小。
 

返回值

如果函数成功,则返回值为非零 (TRUE) 。

如果函数失败,则返回值为零, (FALSE) 。 有关扩展的错误信息,请调用 GetLastError。 下表列出了一些可能的错误代码。

返回代码 说明
CRYPT_E_BAD_ENCODE
编码时遇到错误。
ERROR_FILE_NOT_FOUND
找不到指定的 dwCertEncodingTypelpszStructType 的编码函数。
ERROR_MORE_DATA
如果 pbEncoded 参数指定的缓冲区不够大,无法容纳返回的数据,则函数将设置ERROR_MORE_DATA代码,并将所需的缓冲区大小(以字节为单位)存储在 由ERROR_MORE_DATA所指向的变量中。
 

如果函数失败, GetLastError 可能会返回 抽象语法表示法 One (ASN.1) 编码/解码错误。 有关这些错误的信息,请参阅 ASN.1 编码/解码返回值

注解

使用首选 CryptEncodeObjectEx 函数对加密对象进行编码时,将包含终止 NULL 字符。 解码时,使用首选 CryptDecodeObjectEx 函数时,不会保留终止 NULL 字符。

示例

有关使用此函数的示例,请参阅 示例 C 程序:发出证书请求示例 C 程序:ASN.1 编码和解码

要求

   
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 wincrypt.h
Library Crypt32.lib
DLL Crypt32.dll

另请参阅

CryptDecodeObject

CryptEncodeObjectEx

对象编码和解码函数