如何从命令行解码 base64 字符串?

如何从命令行解码 base64 字符串?

我想编写一个 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(长文件的限制)。

相关内容