base64 操作的奇怪结果

Cre*_*nge 7 linux zsh base64

我在 base64 操作上有奇怪的输出。我有一些我想以编程方式下载的东西,发现链接包含 base64 编码的数据 ( {date}.zip。这可以由以下内容证明:

> echo "MjAyMS0wMS0xMy56aXA="  | base64 --decode
2021-01-13.zip%
Run Code Online (Sandbox Code Playgroud)

如果我将其通过管道送回base64,则会得到相同的结果:

> echo "MjAyMS0wMS0xMy56aXA="  | base64 --decode | base64
MjAyMS0wMS0xMy56aXA=
Run Code Online (Sandbox Code Playgroud)

但是,如果我将解码后的字符串直接传递给 base64,则会得到不同的结果:

> echo "2021-01-13.zip"  | base64
MjAyMS0wMS0xMy56aXAK
Run Code Online (Sandbox Code Playgroud)

很好奇为什么会发生这种情况,以及我如何解决。

谢谢!

Kam*_*ski 28

比较这两个命令的输出:

echo "MjAyMS0wMS0xMy56aXA="  | base64 --decode | od -c
echo "2021-01-13.zip" | od -c
Run Code Online (Sandbox Code Playgroud)

您将看到base64 --decode打印的内容中没有换行符(因为您开始的字符串显然没有对换行符进行编码)。echo打印内容中有一个换行符(因为这是echo工作原理)。现在试试这个:

echo -n "2021-01-13.zip"  | base64
Run Code Online (Sandbox Code Playgroud)

或者更好

printf '%s' "2021-01-13.zip"  | base64
Run Code Online (Sandbox Code Playgroud)


Jus*_*tme 27

Echo 默认添加行尾字符。

尝试不添加行尾:

> echo -n "2021-01-13.zip"  | base64
MjAyMS0wMS0xMy56aXA=
Run Code Online (Sandbox Code Playgroud)