ファイルをBase64エンコード/デコードする

Last modified: 2021-10-04

Base64エンコードの用途

基本コマンド群のcoreutilsパッケージに含まれているbase64というコマンドにより、ファイルのBase64エンコードとデコードができる。これにより、非プレーンテキスト/バイナリデータであっても半角

  • アルファベット
  • 数字
  • +, /, =

の組み合わせで表現でき、

  • Web掲示板
  • ウェブログ
  • Wiki
  • テキスト貼り付けサイト

などの内、ファイルアップロードに対応していない場所にもバイナリデータの内容が書き込める。

Base64は電子メールにファイルを添付するのにも使われている。

デメリットとしては、元のデータよりも情報量が増える点がある。

使い方

エンコード・デコードともに

  • 標準出力に変換結果が出力される
  • 入力については標準入力か引数による指定の2通りの方法がある

という点が共通している。

エンコード

(引数に入力ファイルを指定)
$ base64 /path/to/input/file.ext > /path/to/output.b64

(標準入力から読み込む)
$ base64 < /path/to/input/file.ext > /path/to/output.b64

(パイプを用いて他コマンドの出力を読み込む)
$ [command ...] | base64 > /path/to/output.b64

テキストファイルをBase64エンコードする場合

$ cat file.txt | xz | base64 > file.txt.xz.b64

のようにすると、XZ圧縮でサイズが大幅に縮む。

GNU coreutilsのbase64では、出力されるファイルには76文字ごとに改行コードが入る。これを防ぐには-w 0オプションで改行の挿入を無効にする。

デコード

(引数に入力ファイルを指定)
$ base64 -d /path/to/input.b64 > /path/to/output/file.ext

(標準入力から読み込む)
$ base64 -d < /path/to/input.b64 > /path/to/output/file.ext

(パイプを用いて他コマンドの出力を読み込む)
$ [command ...] | base64 -d > /path/to/output/file.ext

上のXZ圧縮+Base64エンコードされたテキストファイルは

$ base64 -d file.txt.xz.b64 | xzcat > file.txt

のようにすると元に戻る。

文字列などをBase64エンコード/デコード

printfechoコマンドを使用して、パイプでつなげる。

(printfを使用)
$ printf "テスト" | base64
44OG44K544OI
$ printf "44OG44K544OI" | base64 -d
テスト

(echoを使用)
$ echo "テスト" | base64
44OG44K544OICg==
$ echo "44OG44K544OICg==" | base64 -d
テスト