web-dev-qa-db-ja.com

コマンドラインでbase64をエンコードするにはどうすればいいですか?

Mac OS Xにファイルまたは標準入力をbase64エンコードする端末コマンドはありますか?

201
Josh

opensslはあなたのためにこれを行うことができます、そしてそれはすべてデフォルトでOS Xと共にインストールされます。 darwinportsをインストールする必要はありません。

$ openssl base64 -in <infile> -out <outfile>

-inオプションがなければ、標準入力から読み込みます。

215
Steve Folly

Opensslはもっと簡潔に使うことができます。

echo -n 'input' | openssl base64

[echo -n - >を使用する必要があります。そうしないと、改行文字を含めてエンコードが行われます]

または

openssl base64 <ENTER> [type input] <CTRL+D>
83
Glen

試してみてください。

base64 -i <in-file> -o <outfile>

OS Xではデフォルトで利用可能です。

48
Derreck Dean

私のOS X 10.9.4ではbase64コマンドがデフォルトで利用可能です。

端末内の文字列をエンコードおよびデコードするにはbase64 <<< stringおよびbase64 -D <<< stringを、ファイルのエンコードおよびデコードにはbase64 -in fileおよびbase64 -D -in fileを使用できます。

29
WKPlus

PythonはOS Xにデフォルトで提供されているので、以下のように使用できます。

$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO

あるいは、 Brewbrew install coreutils)でcoreutilsをインストールすると、base64コマンドが提供されます。

$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
7
kenorb

それをクリップボードに直接パイプで送ることもできます(少なくともMacでは)。

openssl base64 -in [filename] | pbcopy

5
Steve

速度の面では、openssl、Perl、uuencodeの順に使います。移植性の観点から、私はuuencodeに続けてPerlに続けてopensslを使用することにします(可能な限り多くの他のUNIXのような株式プラットフォームでコードを再利用したい場合)。ただし、すべてのUNIXの変種が-mスイッチをサポートしているわけではないので注意してください(iirc AIXはサポートしていますが、HP/UXはサポートしていますが、Solarisはサポートしていません)。

$ time Perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' \
> out.jpg 1>filename.b64
real    0m0.025s

$ time uuencode -m -o filename.b64 out.jpg filename_when_uudecoded.txt
real    0m0.051s

$  time openssl base64 -in out.jpg -out filename.b64 
real    0m0.017s

-mスイッチを使用して、 RFC1521 で指定されているように、base64ごとにfile_in.txtをuuencodeし、(filename_when_uudecoded.txtをデフォルトのファイル名として)filename.b64に書き込みます。デコード時):

uuencode -m -o filename.b64 file_in.txt filename_when_uudecoded.txt

STDINの例:

cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt
5
phiz

Python

Pythonは最近すべてのMacにプレインストールされています。

ターミナルでpython(または ipython )を実行します。

ファイルをエンコードします。

 base64data = open('myfile.jpg','rb').read().encode('base64')
 open('myfile.txt','w').write(base64data)

ファイルをデコードします。

data = open('myfile.txt').read().decode('base64')
open('myfile.jpg','wb').write(data)

もちろん、どちらの操作もonelinerに変換することができますが、これにより読みやすくなります。

OpenSSL

## encode to base64 (on OSX use `-output`)
openssl base64 -in myfile.jpg -output myfile.jpg.b64

## encode to base64 (on Linux use `-out`)
openssl base64 -in myfile.jpg -out myfile.jpg.b64


## decode from base64 (on OSX `-output` should be used)
openssl base64 -d -in myfile.jpg.b64 -output myfile.jpg

## decode from base64 (on Linux `-out` should be used)
openssl base64 -d -in myfile.jpg.b64 -out myfile.jpg

-out/-output... filenameを省略すると、標準出力に出力されます。

base64

OSXとUbuntuの両方に存在する別のootbユーティリティ:

## encode to base64
base64 < myfile.jpg > myfile.jpg.b64

## decode from base64 (OSX) (note the uppercase 'D')
base64 -D < myfile.jpg.b64 > myfile.jpg

## decode from base64 (Linux) (note the lowercase 'd')
base64 -d < myfile.jpg.b64 > myfile.jpg
3
ccpizza
uuencode -m [-o output_file] [file] name

nameは、エンコードされたヘッダーに表示される名前です。

例:

cat docbook-xsl.css | uuencode -m docbook-xsl.css

または

uuencode -m -o docbook-xsl.css.b64 docbook-xsl.css docbook-xsl.css
2
user214207

上記のSteve Follyの答えに加えて、標準入力モードで暗号化する場合、余分な改行を渡さないようにするには、Ctrl + Dキーを2回押して、改行を追加せずに入力を終了します。出力は同じ行の直後に表示されます。

例えば:

$ openssl base64 [Enter]
input<CTRL+D><CTRL+D>aW5wdXQ=
$

あるいは、printfを使用することもできます。

$ printf 'input' | openssl base64
aW5wdXQ=
$
2
bigT

何らかの理由で、echo -n <data> | openssl base64は私のbase64データの途中に改行を追加しました。私のbase64データが本当に長かったからだと思います。

エンコードするのにecho -n <data> | base64を使い、デコードするのにecho -n <base64-ed data> | base64 -Dを使ってもうまくいきました。

2
Heath Borders

MacOSでは私はいつも使っています:

echo -n "STRING" | base64

-nは、行末に改行文字を付けないようにするためのものです。

2
patrickS

簡単なNodeJSバージョン

node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
1
mauvm

PerlとMIME :: Base64があります。

Perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}'

これはプレインストールされています。コマンドラインで別々のファイルを指定できます(または標準入力でデータを提供します)。各ファイルは別々にエンコードされています。次のこともできます。

Perl -i.txt -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' file1

これにより、file1がfile1.txtにバックアップされ、Base 64エンコード出力が元のファイルに上書きされます。

1

クロスプラットフォームソリューション

ファイルをbase64としてエンコードするためのクロスプラットフォームシェルコマンドのリストをコンパイルしました。次のコマンドは、入力ファイル(例ではdeploy.keyという名前)を取得し、改行をラップせずにbase64に変換します。 base64出力は、stdoutを介して端末に出力されます。

# For systems with openssl
openssl base64 -A -in=deploy.key

# For systems with Python (2 or 3) installed
python -c "import base64; print(base64.standard_b64encode(open('deploy.key', 'rb').read()).decode())"

# For Windows or Linux systems that have the GNU coreutils base64 command
base64 --wrap=1000000 deploy.key

# For macOS systems
base64 --break=1000000 deploy.key

出力をファイルにリダイレクトするには、> base64-encoded.txtを追加します(選択したファイル名を使用)。

これらのコマンドは、この一部としてプロトタイプ化されました プルリクエスト ここで、クロスプラットフォームシェルコマンドがSSH秘密キーをbase64エンコードして改行を削除することを望みました。

1

フォントファイルをbase64でエンコードしている場合は、次のようにします。

base64 my-webfont.ttf > my-webfont.b64.ttf.txt

私はこれをMac(10.10)でいつも使っています。

:改行はありません。

1
Chuck Ugwuh

recodeはあなたのためにトリックをするべきです

recode ../b64 < file.txt > file.b64

recodeは MacPorts を通してOS Xで利用可能です。

1
heavyd