CMD 批处理 - 将文件编码为 base 64 并修剪字符和新行

so_*_*_mc 3 base64 cmd newline trim batch-file

我正在尝试使用以下命令从 CMD 制作批处理文件:

  1. 将文件转换为 base 64 - 使用 certutil 命令,base 64 的内容如下 (B64.txt):

转换后的 B64.txt

  1. 修剪基数 64 - 基本上,我想删除-----BEGIN CERTIFICATE----------END CERTIFICATE-----这部分完成了,唯一剩下的就是修剪换行符制作一个 base64 的 liner,因为我将把它传递给一个请求有效负载。

这是我到目前为止所做的:

@ECHO OFF 
cd /filePath
certutil -encode sample.pdf B64.txt
type B64.txt | find /V "-----BEGIN CERTIFICATE-----" | find /V "-----END CERTIFICATE-----" > B64.txt
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 使用命令find /V*如何定义新行字符并删除它们?

  2. 有没有更有效的方法来做到这一点?

这也可以在不将基数 64 分配为变量的情况下完成吗?事实证明,变量的限制只有大约 9000 个字符,而我转换的 base 64 通常有 70,000 个字符。

dbe*_*ham 15

使用 CERTUTIL 的未记录功能有一个非常简单的解决方案。您可以
-ENCODEHEX在末尾使用带有未记录格式的动词,直接在一行中获得所需的 base 64 输出,无需任何标题。

certutil -encodehex -f sample.pdf B64.txt 0x40000001
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅 DosTips More Tricks with certutil线程。特别是查看第 4 篇文章,了解所有格式选项的详细说明。

  • 未记录的方法可以使事情发生。我不知道有多少人与 @dbenham 的级别有关 cmd.exe。然而,未记录的方法存在风险。由于它们没有记录,公用事业提供商没有义务保留它们。 (2认同)
  • @lit - 我说格式选项没有记录,但这并不完全正确。`certutil -encodehex /?` 列出了可选的 `type` 选项,但没有描述值可以是什么。[CryptBinaryToStringA 函数](https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptbinarytostringa?redirectedfrom=MSDN) 的 Windows32 API 文档描述了大多数选项。将 CERTUTIL 与 CryptBinaryToStringA 联系起来只是一个小小的信念飞跃,但这些选项可能是可靠的。 (2认同)