CryptStringToBinaryA 函数 (wincrypt.h)

CryptStringToBinary 函数将格式化字符串转换为字节数组。

语法

BOOL CryptStringToBinaryA(
  [in]      LPCSTR pszString,
  [in]      DWORD  cchString,
  [in]      DWORD  dwFlags,
  [in]      BYTE   *pbBinary,
  [in, out] DWORD  *pcbBinary,
  [out]     DWORD  *pdwSkip,
  [out]     DWORD  *pdwFlags
);

参数

[in] pszString

指向包含要转换的带格式字符串的字符串的指针。

[in] cchString

要转换的带格式字符串的字符数,不包括终止 NULL 字符。 如果此参数为零, 则 pszString 被视为以 null 结尾的字符串。

[in] dwFlags

指示要转换的字符串的格式。 这可以是以下值之一。

含义
CRYPT_STRING_BASE64HEADER
0x00000000
“-----BEGIN ...-----”和“-----END ...-----”的行之间的 Base64。 请参阅下面的备注。
CRYPT_STRING_BASE64
0x00000001
Base64,不带标头。
CRYPT_STRING_BINARY
0x00000002
纯二进制副本。
CRYPT_STRING_BASE64REQUESTHEADER
0x00000003
“-----BEGIN ...-----”和“-----END ...-----”的行之间的 Base64。 请参阅下面的备注。
CRYPT_STRING_HEX
0x00000004
仅十六进制格式。
CRYPT_STRING_HEXASCII
0x00000005
带有 ASCII 字符显示的十六进制格式。
CRYPT_STRING_BASE64_ANY
0x00000006
按顺序尝试以下操作:
CRYPT_STRING_BASE64HEADER
CRYPT_STRING_BASE64
CRYPT_STRING_ANY
0x00000007
按顺序尝试以下操作:
CRYPT_STRING_BASE64HEADER
CRYPT_STRING_BASE64
CRYPT_STRING_BINARY
CRYPT_STRING_HEX_ANY
0x00000008
按顺序尝试以下操作:
CRYPT_STRING_HEXADDR
CRYPT_STRING_HEXASCIIADDR
CRYPT_STRING_HEX
CRYPT_STRING_HEXRAW
CRYPT_STRING_HEXASCII
CRYPT_STRING_BASE64X509CRLHEADER
0x00000009
“-----BEGIN ...-----”和“-----END ...-----”的行之间的 Base64。 请参阅下面的备注。
CRYPT_STRING_HEXADDR
0x0000000a
十六进制,显示地址。
CRYPT_STRING_HEXASCIIADDR
0x0000000b
十六进制,显示 ASCII 字符和地址。
CRYPT_STRING_HEXRAW
0x0000000c
原始十六进制字符串。

Windows Server 2003 和 Windows XP: 不支持此值。

CRYPT_STRING_STRICT
0x20000000
为 Base64 数据设置此标志,以指定二进制数据的末尾仅包含空格,并且最多包含三个等于“=”符号。

Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支持此值。

[in] pbBinary

指向接收返回的字节序列的缓冲区的指针。 如果此参数为 NULL,则该函数将计算所需缓冲区的长度,并返回以字节为单位的 DWORD 所指向 的 DWORD 内存的大小(以字节为单位)。

[in, out] pcbBinary

指向 DWORD 变量的指针,该变量在输入时包含 pbBinary 缓冲区的大小(以字节为单位)。 函数返回后,此变量包含复制到缓冲区的字节数。 如果此值不足以包含所有数据,则函数将失败, GetLastError 将返回 ERROR_MORE_DATA

如果 pbBinaryNULL,则忽略由 pbBinary 指向的 DWORD

[out] pdwSkip

指向 DWORD 值的指针,该值接收跳过到标头开头的 -----BEGIN ...----- 字符数。 如果没有标头,则 DWORD 设置为零。 此参数是可选的,如果不需要此参数,可为 NULL

[out] pdwFlags

指向接收转换中实际使用的标志的 DWORD 值的指针。 这些标志与 用于 dwFlags 参数的标志相同。 在许多情况下,这些标志与 在 dwFlags 参数中传递的标志相同。 如果 dwFlags 包含以下标志之一,则此值将收到指示字符串的实际格式的标志。 此参数是可选的,如果不需要此参数,可为 NULL

含义
CRYPT_STRING_ANY
此变量将收到以下值之一。 每个值指示字符串的实际格式。
CRYPT_STRING_BASE64HEADER
CRYPT_STRING_BASE64
CRYPT_STRING_BINARY
CRYPT_STRING_BASE64_ANY
此变量将收到以下值之一。 每个值指示字符串的实际格式。
CRYPT_STRING_BASE64HEADER
CRYPT_STRING_BASE64
CRYPT_STRING_HEX_ANY
此变量将收到以下值之一。 每个值指示字符串的实际格式。
CRYPT_STRING_HEXADDR
CRYPT_STRING_HEXASCIIADDR
CRYPT_STRING_HEX
CRYPT_STRING_HEXRAW
CRYPT_STRING_HEXASCII

返回值

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

如果函数失败,则返回值为零, (FALSE) 。

注解

此函数对 CRYPT_STRING_BASE64HEADERCRYPT_STRING_BASE64REQUESTHEADERCRYPT_STRING_BASE64X509CRLHEADER 标志的处理方式相同:它们尝试分析表单 -----BEGIN ...----- 行与 -----END ...-----之间的第一个 base64 编码数据块。 这些 ... 部分将被忽略,它们不需要匹配。 如果分析成功,则会在 pdwFlags 参数指向的 DWORD 中返回 dwFlags 参数中传递的值。 请注意,值 CRYPT_STRING_BASE64REQUESTHEADERCRYPT_STRING_BASE64X509CRLHEADER 并不意味着找到请求标头或 X.509证书吊销列表 (CRL) 。

注意

wincrypt.h 标头将 CryptStringToBinary 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

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

另请参阅

CryptBinaryToString