base64 运算的奇怪结果

base64 运算的奇怪结果

我在 base64 操作上输出了奇怪的结果。我想通过编程下载一些东西,发现链接包含 base64 编码数据 ( {date}.zip。以下情况可以证明这一点:

> echo "MjAyMS0wMS0xMy56aXA="  | base64 --decode
2021-01-13.zip%

如果我将其传回到base64,我会得到相同的结果:

> echo "MjAyMS0wMS0xMy56aXA="  | base64 --decode | base64
MjAyMS0wMS0xMy56aXA=

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

> echo "2021-01-13.zip"  | base64
MjAyMS0wMS0xMy56aXAK

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

谢谢!

答案1

比较这两个命令的输出:

echo "MjAyMS0wMS0xMy56aXA="  | base64 --decode | od -c
echo "2021-01-13.zip" | od -c

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

echo -n "2021-01-13.zip"  | base64

或者更好的

printf '%s' "2021-01-13.zip"  | base64

答案2

Echo 默认添加行尾字符。

尝试不添加行尾:

> echo -n "2021-01-13.zip"  | base64
MjAyMS0wMS0xMy56aXA=

相关内容