答案1
尝试:
echo -n "apfjxkic-omyuobwd339805ak:60a06cd2ddfad610b9490d359d605407" | base64 -w 0
-w
,在字符--wrap=COLS
后换行(默认)。用于禁用换行。COLS
76
0
将其设为默认的一个可能原因76
是 Base64 编码旨在提供一种在电子邮件和 Usenet 帖子中包含二进制文件的方法,这种方法适用于使用 80 个字符宽度显示器的人。将 76 个字符宽度设为默认使该用例更容易实现。
答案2
在没有-w
该选项的系统上(例如 Alpine Linux、Arch Linux钩子等),您可以手动处理 base64 的输出:base64
initramfs
base64 some_file.txt | tr -d \\n
这是一种蛮力方法;我没有让程序合作,而是tr
不加区别地删除标准输出上的每个换行符。
答案3
因此,请echo -n
在重定向到 ; 之前使用 删除换行符base64
,并使用base64 -w 0
防止base64
其自身在输出中添加换行符。
me@host:~
$ echo -n mypassword | base64 -w 0
bXlwYXNzd29yZA==me@host:~ # <<<<<<<<<<<<<<< notice that no line break added after "==" due to '-w 0'; so me@host is on the same line
$ echo -n 'mypassword' | base64 -w 0
bXlwYXNzd29yZA==me@host:~ # <<<<<<<<<<<<<<<<<< notice adding single quotes does not affect output, so you can use values containing spaces freely
一个很好的验证方法是用来od -c
显示实际的字符。
me@host:~
$ echo -n bXlwYXNzd29yZA== | base64 -d | od -c
0000000 m y p a s s w o r d
0000012
您会看到没有添加“\n”。但是,如果您使用不带“-n”的“echo”,od
则会显示“\n”:
me@host:~
$ echo mypassword | base64 -w 0
bXlwYXNzd29yZAo=me@host:~
$ echo bXlwYXNzd29yZAo= | base64 -d | od -c
0000000 m y p a s s w o r d \n
0000013
最后,创建一个函数将会对你将来有所帮助:
base64-encode() {
if [ -z "$@" ]; then
echo "Encode string with base64; echoing without line break, and base64 does not print line break neither, to not introducing extra chars while redirecting. Provide the string to encode. "
return 1
fi
echo -n "$@" | base64 -w 0 # here I suppose string if containing space is already quoted
}
答案4
对于任何使用 的人openssl base64
,您可以使用该-A
标志:
-A Process base64 data on one line (requires -a)
-a Perform base64 encoding/decoding (alias -base64)
以下对我有用:
echo -n '{string}' | openssl base64 -A