コマンドラインからbase64文字列をデコードするにはどうすればよいですか?

私はbase64文字列をデコードするbashスクリプトを書きたいと思います。 たとえば、私はタイプします decode QWxhZGRpbjpvcGVuIHNlc2FtZQ== そしてそれは印刷します Aladdin:open sesame そして、プロンプトに戻ります。

これまでのところ、私は以下を含む簡単なbashファイルを試しました python -m base64 -d $1 しかし、このコマンドは文字列ではなくファイル名を期待します。 余分なパッケージをインストールすることなく、これを達成するためにコマンドラインから実行できる別の非対話的なコマンド(必ずしもPythonモジュールに (または、私が行う場合は、超最小限の何か。)

ちょうど使用して下さい base64 からのプログラム coreutils パッケージ:

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.'QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNvZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=$ openssl enc -base64 -d << EOF> QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNv> ZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=> EOFAnd 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 |.

私はbase64コマンドラインにコメントしました http://wiki.opensslfoundation.com/index.php?title=Command_Line_Utilities. だから私はopenssl base64decodingを使用するときに警告を出します :

 openssl base64 -e <<< 'Welcome to openssl wiki' V2VsY29tZSB0byBvcGVuc3NsIHdpa2kKopenssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'Welcome to openssl wiki

警告 base64の行の長さは、opensslではデフォルトで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オプションがバグであるため(長いファイルでの制限)、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 ": ")))'

私は髪のいくつかの瞬間を持っていた-ので、このいずれかを引っ張って base64 Linuxのツールと、また、 openssl 確かに、デコードすることができます。 しかし、私は少し間違った値にデコードするこの特定のbase64エンコードされたファイルを持っています。 数バイトは一致しますが、この存在があります EF BF BD EF BF BD で見ると hexedit 視聴者。 そして、正しくデコードされた期待される出力と比較すると、次のバイトシーケンスが再び一致します。 バイトのこれらの奇妙なシーケンスは、いつかとして、インbetweensに挿入されました EF BF BD のみ。

この問題を解決するには、Java送信者がそれをどのようにエンコードするかを調べてから、小さなjava base64デコーダを作成する必要があります。 そして今、私は期待値にデコードすることができます。

ここではそれを行う小さなスニペットです: https://gist.github.com/typelogic/0567cdab6c15487c31496cb90006ff52

いい質問だ そして、あなたのヒントをありがとう、私は今、python-m base64-hが便利になることができることを知っています。