Mac OS Xにファイルまたは標準入力をbase64エンコードする端末コマンドはありますか?
openssl
はあなたのためにこれを行うことができます、そしてそれはすべてデフォルトでOS Xと共にインストールされます。 darwinportsをインストールする必要はありません。
$ openssl base64 -in <infile> -out <outfile>
-in
オプションがなければ、標準入力から読み込みます。
Opensslはもっと簡潔に使うことができます。
echo -n 'input' | openssl base64
[echo -n - >を使用する必要があります。そうしないと、改行文字を含めてエンコードが行われます]
または
openssl base64 <ENTER> [type input] <CTRL+D>
試してみてください。
base64 -i <in-file> -o <outfile>
OS Xではデフォルトで利用可能です。
私のOS X 10.9.4ではbase64
コマンドがデフォルトで利用可能です。
端末内の文字列をエンコードおよびデコードするにはbase64 <<< string
およびbase64 -D <<< string
を、ファイルのエンコードおよびデコードにはbase64 -in file
およびbase64 -D -in file
を使用できます。
PythonはOS Xにデフォルトで提供されているので、以下のように使用できます。
$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO
あるいは、 Brew (brew install coreutils
)でcoreutils
をインストールすると、base64
コマンドが提供されます。
$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
それをクリップボードに直接パイプで送ることもできます(少なくともMacでは)。
openssl base64 -in [filename] | pbcopy
速度の面では、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
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に変換することができますが、これにより読みやすくなります。
## 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
を省略すると、標準出力に出力されます。
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
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
上記のSteve Follyの答えに加えて、標準入力モードで暗号化する場合、余分な改行を渡さないようにするには、Ctrl + Dキーを2回押して、改行を追加せずに入力を終了します。出力は同じ行の直後に表示されます。
例えば:
$ openssl base64 [Enter]
input<CTRL+D><CTRL+D>aW5wdXQ=
$
あるいは、printf
を使用することもできます。
$ printf 'input' | openssl base64
aW5wdXQ=
$
何らかの理由で、echo -n <data> | openssl base64
は私のbase64データの途中に改行を追加しました。私のbase64データが本当に長かったからだと思います。
エンコードするのにecho -n <data> | base64
を使い、デコードするのにecho -n <base64-ed data> | base64 -D
を使ってもうまくいきました。
MacOSでは私はいつも使っています:
echo -n "STRING" | base64
-nは、行末に改行文字を付けないようにするためのものです。
簡単なNodeJSバージョン
node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
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エンコード出力が元のファイルに上書きされます。
ファイルを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エンコードして改行を削除することを望みました。
フォントファイルをbase64でエンコードしている場合は、次のようにします。
base64 my-webfont.ttf > my-webfont.b64.ttf.txt
私はこれをMac(10.10)でいつも使っています。
注:改行はありません。