群聊精华

vb6快速把二进制文件读成HEX字符串

vb 有什么办法如何快速的把二进制文件读成这样的字符串呢

有个API可以直接把二进制一起转成十六进制或base64字符串

胎神说:
CryptBinaryToString(二进制转字符串),还有反过来的CryptStringToBinary。
不要自己去读文件,用虚拟内存映射,直接把文件数据映射成虚拟内存,然后把这个虚拟内存地址传给CryptBinaryToString。

那么,看看官方文档:


CryptBinaryToStringW 函数 (wincrypt.h)

  • 项目
  • 2023/08/27

反馈

本文内容

  1. 语法
  2. 参数
  3. 返回值
  4. 注解

显示另外 2 个

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

语法

C++复制

BOOL CryptBinaryToStringW(
  [in]            const BYTE *pbBinary,
  [in]            DWORD      cbBinary,
  [in]            DWORD      dwFlags,
  [out, optional] LPWSTR     pszString,
  [in, out]       DWORD      *pcchString
);

参数

[in] pbBinary

指向要转换为字符串的字节数组的指针。

[in] cbBinary

pbBinary 数组中的元素数。

[in] dwFlags

指定生成的格式化字符串的格式。 此参数的取值可为下列值之一:展开表

含义
CRYPT_STRING_BASE64HEADER0x00000000Base64,具有证书开头和结束标头。
CRYPT_STRING_BASE640x00000001Base64,不带标头。
CRYPT_STRING_BINARY0x00000002纯二进制副本。
CRYPT_STRING_BASE64REQUESTHEADER0x00000003Base64,具有请求开头和结束标头。
CRYPT_STRING_HEX0x00000004仅十六进制。
CRYPT_STRING_HEXASCII0x00000005十六进制,显示 ASCII 字符。
CRYPT_STRING_BASE64X509CRLHEADER0x00000009Base64,带有 X.509 CRL 开头和结束标头。
CRYPT_STRING_HEXADDR0x0000000a十六进制,显示地址。
CRYPT_STRING_HEXASCIIADDR0x0000000b十六进制,显示 ASCII 字符和地址。
CRYPT_STRING_HEXRAW0x0000000c原始十六进制字符串。Windows Server 2003 和 Windows XP: 不支持此值。
CRYPT_STRING_STRICT0x20000000强制严格解码 ASN.1 文本格式。 某些 ASN.1 二进制 BLOB 可能会错误地将 BLOB 的前几个字节解释为 Base64 文本。 在这种情况下,将忽略其余文本。 使用此标志强制执行 BLOB 的完整解码。Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP: 不支持此值。

除了上述值之外,还可以指定以下一个或多个值来修改函数的行为。展开表

含义
CRYPT_STRING_NOCRLF0x40000000不要将任何新行字符追加到编码的字符串中。 默认行为是使用回车/换行 (CR/LF) 对 (0x0D/0x0A) 来表示新行。Windows Server 2003 和 Windows XP: 不支持此值。
CRYPT_STRING_NOCR0x80000000仅对新行使用换行 (LF) 字符 (0x0A) 。 默认行为是使用 CR/LF 对 (0x0D/0x0A) 来表示新行。

[out, optional] pszString

指向接收转换字符串的缓冲区的指针。 若要计算必须分配以保存返回的字符串的字符数,请将此参数设置为 NULL。 函数会将所需数量的字符(包括终止 NULL 字符)放在 pcchString 指向的值中。

[in, out] pcchString

指向 DWORD 变量的指针,该变量包含 pszString 缓冲区的大小(以 TCHAR为单位)。 如果 pszString 为 NULL,则函数计算返回字符串的长度, (包括 TCHARs 中的终止 null 字符) ,并在此参数中返回它。 如果 pszString 不为 NULL 且不够大,则该函数会将二进制数据转换为指定的字符串格式(包括终止 null 字符),但 pcchString 接收 TCHARs 的长度,不包括终止 null 字符。

返回值

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

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

注解

除了使用 CRYPT_STRING_BINARY 编码外,所有字符串都追加了新的行序列。 默认情况下,新行序列是 CR/LF 对 (0x0D/0x0A) 。 如果 dwFlags 参数包含 CRYPT_STRING_NOCR 标志,则新行序列是 LF 字符 (0x0A) 。 如果 dwFlags 参数包含 CRYPT_STRING_NOCRLF 标志,则不会向字符串追加新的行序列。

 备注

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

要求

展开表

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

来自:

https://learn.microsoft.com/zh-cn/windows/win32/api/wincrypt/nf-wincrypt-cryptbinarytostringw

另请参阅

CryptStringToBinary

Views: 73

Hi, I’m 邓伟

本来无一物,何处惹尘埃

发表回复