使用 base64 编码密码时是否需要包含 -n 选项?

Do I need to include -n option when encoding a password using base64?

我在某处读到,当用 base64 编码密码时,我应该使用 echo -n 来防止换行符包含在编码值中。例如,

echo changeme | base64
Y2hhbmdlbWUK
echo -n changeme | base64
Y2hhbmdlbWU=

这两个base64字符串是不同的,但是当我解码它们时它们是相同的

echo Y2hhbmdlbWUK | base64 -d
changeme
echo Y2hhbmdlbWU= | base64 -d
changeme

所以我真的需要添加 -n 选项 https://linux.die.net/man/1/echo 说:

do not output the trailing newline

搜索使用 python 给出了这个长篇大论的示例...没有全部阅读 Simple way to encode a string according to a password?

当您使用 online converter 将其解码为十六进制时,您会看到第一个字符串变为 6368616e67656d650a 并在末尾具有 0a(ASCII 换行符),这第二个没有。

所以答案是肯定的,你确实需要添加-n选项。

如果您将 echo 更改为 echo -n,您也会看到这一点。

echo -n Y2hhbmdlbWU= | base64 -d
changemePROMPT-SHOWS-HERE

另一种查看方式是使用以下 UNIX 命令:

echo -n Y2hhbmdlbWUK | base64 -d | od -c
0000000   c   h   a   n   g   e   m   e  \n

echo -n Y2hhbmdlbWU= | base64 -d | od -c
0000000   c   h   a   n   g   e   m   e

您可以看到第一个编码包含换行符而第二个没有。