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


426

base64文字列をデコードするbashスクリプトを書きたいです。たとえば、入力するdecode QWxhZGRpbjpvcGVuIHNlc2FtZQ==と、印刷さAladdin:open sesameれてプロンプトに戻ります。

これまでのところ、次を含む単純なbashファイルを試しましたpython -m base64 -d $1が、このコマンドは文字列ではなくファイル名を想定しています。追加のパッケージをインストールせずにこれを達成するためにコマンドラインから実行できる別の非対話型コマンド(必ずしもPythonモジュールではない)がありますか?(または、もし私がそうするなら、超最小の何か。)

回答:


630

パッケージbase64からプログラムを使用するだけcoreutilsです:

echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode

または、改行文字を含める

echo `echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode`

出力(改行を含む):

Aladdin:open sesame

10
または:echo QWxhZGRpbjpvcGVuIHNlc2FtZQ == | base64 --decode && echo
グレッグチャバラ14

61
または:base64 -d <<< QWxhZGRpbjpvcGVuIHNlc2FtZQ==
-jmk

4
echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | "C:\Program Files\Git\usr\bin\base64" --decode 2> nul > example.txtWindowsでgitのbase64を使用。
火災

3
それはない@January Just use多くの人が知っているので、base64プログラム-が、1つのことができないとしてだけでコマンドラインオプションとして文字列を挿入し、しばらくの間、一度だけCLIに触れるユーザーのための構文の権利を取得することは困難です。
-Feeela

12
Macでは、エンコードされた文字列をクリップボードにコピーして実行しpbpaste | base64 --decodeます。
マリアンチェルニー

95

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.

8
Philippeの回答のおかげで、長いbase64文字列に-Aを追加する必要があります。そうしないと、opensslは何も返しません。askubuntu.com
a /

@morlochまたは単にデータをbase64エンコードから改行を削除しないよう、そして期待どおりに動作します...
geirha

1
私は考えていないcoreutilsようなプログラムを含む「追加」のパッケージをlsmkdircpmv、とchmod。私はあなたがそれなしであなたのマシンで役に立つ何かをすることができるとは思わない。
vidstige

@vidstige、それは本当です。base64がデフォルトでインストールされていないという印象を受けた理由がわかりません。それは全くそうではありません。
ガイラ

1
これはubuntuスタック交換ですが、Windows上のGit Bash、少なくとも私がインストールした古い1.8.1 Git Bashバージョンで作業opensslする標準base64よりも、使用する方が有利です。
ウィルキル

38

どうぞ!

~/.bashrcファイルの最後に次を追加します。

decode () {
  echo "$1" | base64 -d ; echo
}

次に、新しいターミナルを開き、コマンドを実行します。

decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==

これは、あなたがあなたの質問で求めたことを正確に行います。


20

元の依存関係を使用すると、元のスクリプトを少し変更するだけでこれを実行できます。

echo $1 | python -m base64 -d

ファイル名を渡さない場合、そのPythonモジュールは標準入力から読み取ります。最初のパラメーターをパイプで渡すには、を使用できますecho $1 |


1
また:python -m base32 filename
kenorb

1
これは機能しません:)が、.b32 *メソッドを使用します
rzr 14

13

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

警告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オプションはBUGGY(長いファイルの制限)であるため、実際にはbase64の結果を64文字の行に分割する方が適切です。


4

を使用して perl

perl -MMIME::Base64 -ne 'printf "%s\n",decode_base64($_)' <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="

または同じ python

python -m base64 -d <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.