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 中所需内存的大小(以字节为单位)。

[in, out] pcbBinary

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

如果 pbBinaryNULL,则忽略 指向的 D WORD

[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 编码数据的块。 将忽略 ... 部分,它们不需要匹配。 如果分析成功,则 dwFlags 参数中传递的值将返回由 pdwFlags 参数指向的 DWORD。 请注意,CRYPT_STRING_BASE64REQUESTHEADERCRYPT_STRING_BASE64X509CRLHEADER 的值并不意味着找到请求标头或 X.509证书吊销列表(CRL)。

注意

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

要求

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

另请参阅

CryptBinaryToString