我想编写一个 bash 脚本来解码 base64 字符串。例如,我输入decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==
,它会打印Aladdin:open sesame
并返回到提示符。
到目前为止,我已经尝试了一个包含以下内容的简单 bash 文件python -m base64 -d $1
,但此命令需要文件名而不是字符串。是否有另一个非交互式命令(不一定在 Python 模块中)可以从命令行运行以实现此目的,而无需安装任何额外的软件包?(或者如果我这样做,则安装一些极简的东西。)
答案1
只需使用包base64
中的程序coreutils
:
echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode
或者,包含换行符
echo `echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode`
输出(包括换行符):
Aladdin:open sesame
答案2
openssl 还可以对 base64 进行编码和解码
$ openssl enc -base64 <<< 'Hello, World!'
SGVsbG8sIFdvcmxkIQo=
$ openssl enc -base64 -d <<< SGVsbG8sIFdvcmxkIQo=
Hello, World!
编辑:base64 编码字符串最终出现在多行的示例:
$ openssl enc -base64 <<< 'And if the data is a bit longer, the base64 encoded data will span multiple lines.'
QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNv
ZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=
$ openssl enc -base64 -d << EOF
> QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNv
> ZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=
> EOF
And if the data is a bit longer, the base64 encoded data will span multiple lines.
答案3
干得好!
将以下内容添加到文件底部~/.bashrc
:
decode () {
echo "$1" | base64 -d ; echo
}
现在,打开一个新的终端并运行命令。
decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==
这将完全按照您在问题中所要求的那样去做。
答案4
我确实在评论中base64命令行http://wiki.opensslfoundation.com/index.php?title=Command_Line_Utilities.因此,当我使用 openssl base64 解码时,我发出一个警告:
openssl base64 -e <<< 'Welcome to openssl wiki'
V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK
openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'
Welcome to openssl wiki
警告openssl 中 base64 行长度默认限制为 64 个字符:
openssl base64 -e <<< 'Welcome to openssl wiki with a very long line
that splits...'
V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRo
YXQgc3BsaXRzLi4uCg==
openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='
=> 沒有任何事!
为了能够解码超过 64 个字符且不包含换行符的 base64 行,请使用 -A 选项:
openssl base64 -d -A <<<
'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='
Welcome to openssl wiki with a very long line that splits...
无论如何,最好将 base64 结果实际拆分为 64 个字符的行,因为 -A 选项有 BUGGY(长文件的限制)。