macOS 上的 base64 命令 returns 错误结果

base64 command on macOS returns wrong result

当调用 base64 <<< username:password 时,我得到了这个结果:dXNlcm5hbWU6cGFzc3dvcmQK

在 PostMan 中使用该结果并针对 Basic Auth 端点发出请求时,我收到了 401。

https://www.base64encode.org 处编码 username:password 时,我得到了这个结果:dXNlcm5hbWU6cGFzc3dvcmQ= 我可以成功地将它用于上面的 Basic Auth 端点。

如果我使用 PostMan 生成传入 usernamepassword 的基本身份验证 header,它会生成与 https://www.base64encode.org 相同的 base64 编码字符串。 我还可以将 username:password 复制到 testin.txt 并使用 openssl 创建 base64 字符串:

openssl base64 -in testin.txt -out testout.txt returns dXNlcm5hbWU6cGFzc3dvcmQKbase64 创建的错误结果相同。

openssl version returns OpenSSL 0.9.8zh 14 Jan 2016

解码 dXNlcm5hbWU6cGFzc3dvcmQK 得到 username:password\n.

所以我的猜测是,在这两种情况下,您都有意想不到的换行。 testin.txt 的情况很容易解决(修改文件,删除换行符)。

我希望 base64 的情况可以通过使用带 -n 参数的 echo 来删除换行来解决:

echo -n username:password | base64 --encode

mac 上的 BASE64 文件转换OS(当前使用 OS X 10.14.6):

编码(PDF -> BASE64):cat aaa.pdf | base64 > aaa.base64

解码(BASE64 -> PDF):cat aaa.base64 | base64 -D > aaa.pdf

我在这里使用 PDF 文件作为示例。当然你可以使用任何文件类型。

在 mac OS 10.15.6

--encode 选项不可用。 所以这在不包括 --encode 选项的情况下有效。

echo -n username:password | base64