2010-03-16 23:15:37 +0000 2010-03-16 23:15:37 +0000
243
243

コマンドラインでbase64をエンコードする方法を教えてください。

Mac OS Xでファイルやstdinをbase64でエンコードするターミナルコマンドはありますか?

回答 (17)

252
252
252
2010-03-17 00:25:08 +0000

opensslはあなたのためにこれを行うことができ、デフォルトでOS Xにすべてインストールされています。

107
107
107
2010-04-21 06:12:44 +0000

Openssl はもっと簡単に使えます:

echo -n 'input' | openssl base64

[echo -n -> must be used, or encoding will be done including new line character]

or

openssl base64 <ENTER> [type input] <CTRL+D>
54
54
54
2015-02-27 20:13:36 +0000

使用してみてください:

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

OS Xではデフォルトで使用できるはずです。

34
34
34
2016-03-17 02:48:49 +0000

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

ターミナルで文字列をエンコードしてデコードする場合はbase64 <<< stringbase64 -D <<< stringを、ファイルをエンコードしてデコードする場合はbase64 -in filebase64 -D -in fileを使うことができます。

16
16
16
2017-08-01 05:33:00 +0000

macOSでは、私は常に次のように使用します:

echo -n "STRING" | base64

-nは、行末の改行文字を避けるためです。

8
8
8
2015-05-25 17:19:49 +0000

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

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

または、coreutils コマンドを提供する Brew (brew install coreutils) を介して base64 をインストールします:

$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
5
5
5
2012-09-05 07:43:32 +0000

速度の面では、openssl、Perl、uuencodeの順に使います。移植性の観点からは、uuencodeの後にPerl、そしてopensslを使うと思います(ストックプラットフォームのような他のUNIXで可能な限り多くのコードを再利用したいのであれば)。ただし、すべてのUNIXが-mスイッチをサポートしているわけではないので注意してください(AIXはサポートしていますが、HP/UXはサポートしていますが、Solarisはサポートしていません)。 txt を RFC1521 で指定されたように base64 ごとに uuencode し、それを filename.b64 (デコード時のデフォルトのファイル名として filenamewhenuudecoded.txt を指定して) に書き込んでください:

$ 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

STDIN の例:

uuencode -m -o filename.b64 file_in.txt filename_when_uudecoded.txt
5
5
5
2016-07-12 15:39:22 +0000

(少なくとも mac では)クリップボードにパイプすることもできます:

openssl base64 -in [filename] | pbcopy

3
3
3
2014-06-17 10:00:25 +0000

Python

Python はプリインストールされています。

Terminal で python (または ipython ) を実行してください。

OpenSSL

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)

-out/007を省略するとstdoutに出力されます。

2
2
2
2014-07-27 05:16:22 +0000

なぜか、echo -n <data> | openssl base64は私のbase64データの途中に改行を追加してしまいました。

echo -n <data> | base64を使ってエンコード、デコードしても問題ありませんでした。

2
2
2
2013-04-04 20:12:06 +0000

001

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

2
2
2
2016-07-27 18:14:32 +0000

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

例えば:

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

代わりに、printf:

$ printf 'input' | openssl base64
aW5wdXQ=
$
``` を使用することができます。
1
1
1
2010-03-17 04:24:21 +0000

Perl plus 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 にバックアップし、Base64 エンコードされた出力を元のファイルの上に書き出します。

1
1
1
2016-04-18 22:13:21 +0000

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

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

私はMac(10.10)でいつもこれを使っています。改行はしません。

1
1
1
2010-03-17 00:00:24 +0000

recodeを使うと、MacPorts](https://www.macports.org/)経由でOS Xに対応しています。

1
1
1
2019-07-08 16:00:26 +0000

クロスプラットフォームでの解決策

ファイルを base64 としてエンコードするためのクロスプラットフォームのシェルコマンドのリストをコンパイルしました。以下のコマンドは入力ファイル (例では deploy.key という名前) を受け取り、改行なしで base64 に変換します。これらのコマンドは、今回の pull request の一部としてプロトタイプを作成しました。

1
1
1
2015-03-27 13:09:24 +0000

シンプルなNodeJSのバージョン:

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