Base64文字列をデコードするbashスクリプトを書きたいです。たとえば、「decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==
」と入力すると、Aladdin:open sesame
と出力され、プロンプトに戻ります。
これまでpython -m base64 -d $1
を含む単純なbashファイルを試しましたが、このコマンドは文字列ではなくファイル名を想定しています。追加のパッケージをインストールせずにこれを達成するためにコマンドラインから実行できる別の非対話型コマンド(Pythonモジュール内にある必要はありません)はありますか? (または、もし私がそうするなら、超最小の何か。)
coreutils
パッケージのbase64
プログラムを使用するだけです。
echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode
または、改行文字を含める
echo `echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode`
出力(改行を含む):
Aladdin:open sesame
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.
どうぞ!
~/.bashrc
ファイルの下部に次を追加します。
decode () {
echo "$1" | base64 -d ; echo
}
次に、新しいターミナルを開き、コマンドを実行します。
decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==
これは、あなたがあなたの質問で要求したとおりに行います。
元の依存関係を使用すると、元のスクリプトを少し変更するだけでこれを実行できます。
echo $1 | python -m base64 -d
ファイル名を渡さない場合、そのpythonモジュールは標準入力から読み取ります。最初のパラメーターをパイプで渡すには、echo $1 |
を使用できます。
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
警告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...
とにかく、-AオプションはBUGGY(長いファイルの制限)であるため、実際にはbase64の結果を64文字の行に分割する方が適切です。
Perl
を使用
Perl -MMIME::Base64 -ne 'printf "%s\n",decode_base64($_)' <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
またはpython
と同じ
python -m base64 -d <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
別の方法を追加するだけです:
emacs -Q --batch -eval '(princ (base64-encode-string (read-string ": ")))'