【Linux】base64コマンドでデータをエンコード・デコードする

目次

概要

バイナリデータやテキストデータを、Base64形式(64種類の英数字と記号のみで構成される文字列)に変換(エンコード)したり、逆に元のデータに戻したり(デコード)するためのコマンドです。

メールへのファイル添付、Web APIでのデータ送受信、Basic認証の認証情報の生成、あるいはHTML/CSSへの画像埋め込み(Data URI Scheme)など、システム間でバイナリデータをテキストとして安全に受け渡す場面で標準的に利用されます。

仕様(引数・オプション)

構文

base64 [オプション] [ファイル名]

主な引数・オプション

オプション説明
-d / --decodeデータをデコード(復元)します。
-i / --ignore-garbageデコード時に、Base64として無効な文字(改行やスペース等)が含まれていても無視して処理を続行します。
-w <文字数>指定した文字数で改行します(デフォルトは76文字)。0 を指定すると改行しません。

基本の使い方

バイナリファイル(ここでは /bin/ls)をBase64テキストデータに変換し、中身を確認します。

コマンド

# /bin/ls をエンコードしてファイルに保存
base64 /bin/ls > ls_encoded.txt

# 先頭4行を表示して確認
head -n 4 ls_encoded.txt

実行結果

可読可能なASCII文字(A-Z, a-z, 0-9, +, /)の羅列に変換されています。

f0VMRgIBAQAAAAAAAAAAAAIAPgABAAAAwARAAAAAAABAAAAAAAAAAOgPAAAA
AAAAAEAAOAACAEAAAgABAAEAAAA4AAEAAAA4AAEAAAAAAAAAAIAAAAAAAAAA
AAAAgAAAAAAAwAAAAAAAALAAAAAAAAACwAAAAAAAAAAQAAAAAAAAAgAAAAAA

実践コマンド

エンコードされたファイルを元に戻す(デコード)

テキスト化されたデータを元のバイナリファイルに復元し、同一性を検証するフローです。-d オプションを使用します。

# テキストファイルからバイナリを復元
base64 -d ls_encoded.txt > ls_restored

# 実行権限を付与して動作確認(任意)
chmod +x ls_restored
./ls_restored --version

# 元のファイルとハッシュ値を比較して完全一致を確認
sha1sum /bin/ls ls_restored
(sha1sumの出力例: ハッシュ値が同じであれば成功)
da39a3ee5e6b...  /bin/ls
da39a3ee5e6b...  ls_restored

文字列をエンコードしてBasic認証用ヘッダーを作る

Web開発などで頻繁に使用される、ユーザー名とパスワードを結合してBase64化する操作です。echo -n(改行なし)を使うのがポイントです。

# "username:password" をエンコード
echo -n "admin:secret123" | base64
YWRtaW46c2VjcmV0MTIz

改行を含んだ破損データを強制的にデコードする

メールの転送などで意図しない改行やスペースが混入してしまったBase64データを、-i オプションで強制的に読み込みます。

# ゴミデータが含まれていても無視してデコード
base64 -d -i corrupted_data.txt > restored_file.bin

カスタムポイント

  • 改行の無効化 (-w 0): デフォルトでは76文字ごとに改行が入りますが、SSH公開鍵やAPIトークンなど、1行の長い文字列として出力したい場合は -w 0 を指定します。Bashbase64 -w 0 image.png > image_base64.txt
  • 標準入力: ファイル引数を省略すると標準入力から読み込みます。パイプライン処理に適しています。

注意点

  1. データサイズの増加:Base64エンコードを行うと、データサイズは元の約 1.33倍(約33%増)になります。巨大なファイルを扱う際はディスク容量やネットワーク帯域に注意してください。
  2. 暗号化ではない:Base64は「可読文字への変換」であり、暗号化ではありません。base64 -d を使えば誰でも簡単に中身を見ることができるため、機密情報の保護目的では使用しないでください。
  3. URLセーフではない:標準のBase64は記号 + と / を使用するため、URLパラメータに含めると誤動作することがあります(URLセーフBase64にするには、文字置換処理が必要です)。

応用

画像ファイルをHTML埋め込み用文字列(Data URI)に変換する

小さなアイコン画像などをHTTPリクエストを減らすためにHTMLやCSSに直接埋め込む際、この形式が使われます。

# 画像を一行のBase64文字列に変換し、Data URI形式のプレフィックスをつけて表示
echo "data:image/png;base64,$(base64 -w 0 icon.png)"
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=

まとめ

base64コマンドは、バイナリデータを「壊さずに」テキストとして扱うための標準的なツールです。uuencodeと似ていますが、Web技術(HTTP/HTML/JSON)との親和性が高く、現代のシステム開発や運用ではこちらが圧倒的に多く利用されます。「認証情報の作成」や「データのテキスト化」が必要な場面で、パイプラインと組み合わせて活用してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次