lof*_*ops 542 command-line bash
我想编写一个 bash 脚本来解码 base64 字符串。例如,我输入decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==
并打印Aladdin:open sesame
并返回提示。
到目前为止,我已经尝试了一个简单的 bash 文件,python -m base64 -d $1
但该命令需要一个文件名而不是一个字符串。是否有另一个非交互式命令(不一定在 Python 模块中)可以从命令行运行以实现此目的,而无需安装任何额外的软件包?(或者,如果我这样做了,那就是极少的东西。)
Jan*_*ary 782
只需使用base64
程序从coreutils
包:
echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode
Run Code Online (Sandbox Code Playgroud)
或者,包含换行符
echo `echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode`
Run Code Online (Sandbox Code Playgroud)
输出(包括换行符):
Aladdin:open sesame
Run Code Online (Sandbox Code Playgroud)
gei*_*rha 111
openssl 也可以对 base64 进行编码和解码
$ openssl enc -base64 <<< 'Hello, World!'
SGVsbG8sIFdvcmxkIQo=
$ openssl enc -base64 -d <<< SGVsbG8sIFdvcmxkIQo=
Hello, World!
Run Code Online (Sandbox Code Playgroud)
编辑: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.
Run Code Online (Sandbox Code Playgroud)
Sir*_*rlo 44
干得好!
将以下内容添加到~/.bashrc
文件底部:
decode () {
echo "$1" | base64 -d ; echo
}
Run Code Online (Sandbox Code Playgroud)
现在,打开一个新终端并运行命令。
decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Run Code Online (Sandbox Code Playgroud)
这将完全满足您在问题中的要求。
Ama*_*icA 21
使用您的原始依赖项,可以通过对原始脚本稍加修改来做到这一点:
echo $1 | python -m base64 -d
Run Code Online (Sandbox Code Playgroud)
如果您不传递文件名,则该 python 模块将从标准输入中读取。要将第一个参数通过管道传输到其中,您可以使用echo $1 |
.
小智 17
我在http://wiki.opensslfoundation.com/index.php?title=Command_Line_Utilities 中评论了 base64 命令行。所以我在使用 openssl base64 解码时发出警告:
openssl base64 -e <<< 'Welcome to openssl wiki'
V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK
openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'
Welcome to openssl wiki
Run Code Online (Sandbox Code Playgroud)
警告base64 行长度在 openssl 中默认限制为 64 个字符:
openssl base64 -e <<< 'Welcome to openssl wiki with a very long line
that splits...'
V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRo
YXQgc3BsaXRzLi4uCg==
openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='
Run Code Online (Sandbox Code Playgroud)
=> 什么都没有!
为了能够在没有超过 64 个字符的换行的情况下解码 base64 行,请使用 -A 选项:
openssl base64 -d -A <<<
'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='
Welcome to openssl wiki with a very long line that splits...
Run Code Online (Sandbox Code Playgroud)
无论如何,这对于实际将 base64 结果拆分为 64 个字符行更好,因为 -A 选项是错误的(长文件限制)。
使用perl
perl -MMIME::Base64 -ne 'printf "%s\n",decode_base64($_)' <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
Run Code Online (Sandbox Code Playgroud)
或者与python
python -m base64 -d <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
976664 次 |
最近记录: |