macos – コマンドラインでbase64をエンコードするには?

base64 command-line encoding macos

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

  280  Josh  2010-03-16


ベストアンサー

opensslがこれを代行してくれますし、OS Xにはデフォルトですべてインストールされています

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

-inオプションがない場合は、標準入力から読み込みます

295  Steve Folly  2010-03-17


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

echo -n 'input' | openssl base64

[ echo -n -> を使用するか、改行文字を含むエンコーディングを行います。]

or

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

136  Glen  2010-04-21


Try using:

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

OS Xではデフォルトで利用できるようになっているはずです

64  Derreck Dean  2015-02-27


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

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

43  WKPlus  2016-03-17


macOSではいつも使っています

echo -n "STRING" | base64

-n は、行末に改行文字を入れないようにするためです

28  patrickS  2017-08-01


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

$ 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

10  kenorb  2015-05-25


速度の面では、openssl、Perl、uuencodeの順に使います。移植性の観点からは、uuencodeの後にPerl、そしてopensslを使うと思います(ストックプラットフォームのような他のUNIXで可能な限り多くのコードを再利用したいのであれば)。ただし、すべてのUNIXが-mスイッチをサポートしているわけではないので注意が必要です(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

RFC1521 で指定された base64 ごとに file_in.txt を uuencode し、それを filename.b64 (デコード時のデフォルトのファイル名として filename_when_uudecoded.txt を使用) に書き出します

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

STDIN example:

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

5  phiz  2012-09-05


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

openssl base64 -in [filename] | pbcopy

5  Steve  2016-07-12


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)

もちろん、どちらの操作もオネリ化することはできますが、こちらの方が読みやすいです

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  2014-06-17


uuencode -m [-o output_file] [file] name

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

Example:

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

or

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

2  user214207  2013-04-04


なぜかecho -n <data> | openssl base64では、私のbase64データの途中に改行が追加されてしまいました。これは、私のbase64データが非常に長かったからだと思います

エンコードにecho -n <data> | base64を使用し、デコードにecho -n <base64-ed data> | base64 -Dを使用しても問題なく動作しました

2  Heath Borders  2014-07-27


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

For example:

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

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

$ printf 'input' | openssl base64
aW5wdXQ=
$

2  solimant  2016-07-27


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  Jonathan Leffler  2010-03-17


NodeJSの簡易版です

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

1  mauvm  2015-03-27


再コード化はあなたのためにトリックを行う必要があります

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

再コードは MacPorts を経由して OS X で利用できます

1  heavyd  2010-03-17


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

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

Mac(10.10)でいつも使っています

注:ラインブレイクはありません

1  Obinwanne Hill  2016-04-18


Cross-platform solutions

ファイルを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  Daniel Himmelstein  2019-07-08


タイトルとURLをコピーしました