base64 编码给出模棱两可的结果

base64 编码给出模棱两可的结果

我正在将(从终端)编码为 base64。但我猜命令没有正确执行。

$ echo 123456789 | base64
MTIzNDU2Nzg5Cg==

然后当我在base64编码,我得到了这个结果

MTIzNDU2Nzg5

我认为也许echo也被编码了所以我跑了

$ echo | base64
Cg==

我想我是对的,但这也无济于事,就像另一个例子一样:

$ echo qwertyuiop | base64
cXdlcnR5dWlvcAo=

并且当使用相同的方式编码时base64编码结果是

cXdlcnR5dWlvcA==

毫不奇怪,base64encode 的结果被接受了(在 SMTP 中)

那么,我在这里遗漏了什么?以及如何成功将字符串或数字转换为 base64?

答案1

答案很简单。

echo 123456789 | base64

或者

echo qwertyuiop | base64

你总是会有一个尾随的换行符。


通过使用命令n的开关来避免此行为echo

% echo -n qwertyuiop | base64
cXdlcnR5dWlvcA==

或使用printf

% printf qwertyuiop | base64
cXdlcnR5dWlvcA==

如您所见,它与返回的结果相同base64编码


并作为@AndreaCorbellini在评论中说

Base64 每输入 3 个字节就会产生 4 个字节的输出,因此输入字节和输出字节之间永远不会有 1:1 的对应关系。这意味着新行最终可能会以不同的方式进行编码,具体取决于其前后的字节。

相关内容