尝试:
echo -n "apfjxkic-omyuobwd339805ak:60a06cd2ddfad610b9490d359d605407" | base64 -w 0
man base64
中得知:
< p >
-w
,--wrap=COLS
在COLS
个字符后换行编码(默认为76
)。使用0
来禁用换行。
76
成为默认值的一个可能原因是,Base64编码旨在提供一种将二进制文件包含在电子邮件和Usenet帖子中的方法,这是为使用80个字符宽度的显示器的人类设计的。将76个字符宽度作为默认值使得这种用法更加方便。tr
来处理这个。好知道还有一种“正确的方法”。 - Score_Underbase64
将任意二进制数据编码为文本。通常,希望处理文本的工具逐行读取,并且可能无法处理非常长的行。如果-w 0
是默认值,那么默认情况下你将只得到一行文本;如果输入很大,那么这将是一行非常长的文本。最好是默认换行。我认为选择76
是因为它比80
稍小,而80
是终端一种事实上的标准。 - Kamil Maciorowskibase64
命令时,都需要添加-w 0
参数(如果忘记了,可能会发生奇怪的事情...),所以这个默认行为对我来说非常奇怪。 - Dherikbase64 some_file.txt | tr -d \\n
echo 'dGVzdAo=' | base64 -d | tr -d \\n | base64
- Aubrey Lavigne-w
选项,包括MacOSX。 - nnsense对于使用 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
base64
之前使用echo -n
来删除换行符;并且使用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
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
}
java.util.Base64
的实现方式。 - Tiina\n
的Base64解码实现?(我希望没有,但谁知道呢...) - marcelm\n
,解码器会抛出java.lang.IllegalArgumentException: Illegal base64 character a
的异常。 - Tiinajava.util.Base64.getMime{Encoder,Decoder}()
分别添加了换行符(CRLF)并接受/移除它们。 - dave_thompson_085