すべての記事
開発

Base64エンコードとは何か、いつ使うべきか

2025年2月10日読了5分

TheDailyUtilsのBase64エンコーダー・デコーダー
ブラウザ上でBase64のエンコード・デコードを行う。

Base64とは何か

Base64は、バイナリデータをテキストとして表現するためのバイナリ→テキスト変換方式です。A〜Z、a〜z、0〜9、+/の64種類の印字可能なASCII文字を使い、パディングには=を用います。目的は、テキストを扱うように設計されたシステム——メールプロトコル、URL、JSONペイロード、HTML属性——を通じてバイナリデータを安全に転送することです。

重要な点として、Base64は暗号化ではありません。セキュリティは一切提供しません。Base64でエンコードされたデータを見た人は誰でも即座にデコードできます。その目的は、安全な転送のためのエンコードであり、隠蔽ではありません。

Base64エンコードの仕組み

このアルゴリズムは、入力の3バイト(24ビット)ごとに、それを6ビットのグループ4つに分割します。各6ビットグループは、Base64のアルファベット64文字のいずれか1文字にマッピングされます。入力3バイトが出力4文字になるため、Base64エンコードによってデータサイズは約33%増加します。

入力の長さが3で割り切れない場合は、出力の合計長が4の倍数になるよう、パディング文字(=または==)が末尾に付加されます。これにより、デコーダーが元のデータの長さを正確に識別できます。

一般的なユースケース

Web開発におけるデータURI: Base64でエンコードすることで、画像やフォントなどのバイナリファイルをHTMLやCSSに直接埋め込むことができます。例えば、小さなアイコンを<img src="data:image/png;base64,iVBORw0K...">として埋め込み、HTTPリクエストを省略できます。小さなアセットには有効ですが、サイズオーバーヘッドがあるため大きなファイルには不向きです。

メールの添付ファイル: MIMEスタンダードはBase64を使って、バイナリの添付ファイル(画像、PDFなど)をASCIIテキストを扱うために作られたSMTPサーバーを通過できるテキストにエンコードします。メールにファイルを添付するたびに、裏でBase64が使われています。

JSONやXMLへのバイナリデータの格納: これらのフォーマットはテキストベースであり、任意のバイナリデータをネイティブに表現できません。APIがJSONレスポンスの一部としてファイル、画像、または暗号素材を送信する必要がある場合、Base64エンコードが標準的な解決策です。

HTTPのベーシック認証: HTTP Basic Auth方式は、AuthorizationヘッダーでBase64を使って認証情報をエンコードします: Authorization: Basic dXNlcjpwYXNz。繰り返しますが、これは暗号化ではありません。必ずHTTPS上でのみ使用してください。

暗号鍵と証明書: TLS証明書やSSH鍵に広く使われるPEM形式は、バイナリのDERエンコードデータをBase64でラップし、-----BEGIN CERTIFICATE----------END CERTIFICATE-----のヘッダーで挟みます。

URLセーフなBase64

標準のBase64では+/を使いますが、これらはURLで特別な意味を持ちます。URLセーフなBase64では+-に、/_に置き換えることで、パーセントエンコードなしにURLに含められる文字列にします。JWT(JSON Web Token)やOAuthフローでこのバリアントを見かけるでしょう。

Base64のデコード

デコードはそのプロセスを正確に逆転させます。Base64の4文字のグループが3バイトのバイナリデータに戻ります。ほとんどのプログラミング言語にはBase64のサポートが組み込まれています:

  • JavaScript: エンコードはbtoa(str)、デコードはatob(str)(ブラウザ); Node.jsではBuffer.from(str, 'base64')
  • Python: import base64; base64.b64encode(data)base64.b64decode(data)
  • コマンドライン: echo -n "hello" | base64echo "aGVsbG8=" | base64 --decode

Base64を使うべきでない場合

実際のセキュリティが必要な場合にBase64は適切ではありません——代わりに適切な暗号化を使用してください。また、オーバーヘッドが生じるため、直接バイナリストリームが使える大きなバイナリ転送には使用しないでください。バイナリカラム型(BLOB、BYTEA)をサポートするデータベースにデータを格納する場合は、Base64エンコードされたテキストよりも生のバイナリで保存する方が効率的です。

Base64を理解することで、APIドキュメントの読み方、ネットワークトラフィックのデバッグ方法、そして証明書・トークン・メディアを自信を持って扱う力が身につきます——あらゆるWeb開発者にとっての基礎スキルです。

ブラウザでBase64のエンコード・デコードを行う

無料のBase64エンコーダー・デコーダーを開く — テキストやバイナリデータを即座に変換。ブラウザ上で完全に動作し、サーバーには何も送信されません。

base64encodingdeveloperbinaryweb