
Base64は、バイナリデータをテキストとして表現するためのバイナリ→テキスト変換方式です。A〜Z、a〜z、0〜9、+と/の64種類の印字可能なASCII文字を使い、パディングには=を用います。目的は、テキストを扱うように設計されたシステム——メールプロトコル、URL、JSONペイロード、HTML属性——を通じてバイナリデータを安全に転送することです。
重要な点として、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-----のヘッダーで挟みます。
標準のBase64では+と/を使いますが、これらはURLで特別な意味を持ちます。URLセーフなBase64では+を-に、/を_に置き換えることで、パーセントエンコードなしにURLに含められる文字列にします。JWT(JSON Web Token)やOAuthフローでこのバリアントを見かけるでしょう。
デコードはそのプロセスを正確に逆転させます。Base64の4文字のグループが3バイトのバイナリデータに戻ります。ほとんどのプログラミング言語にはBase64のサポートが組み込まれています:
btoa(str)、デコードはatob(str)(ブラウザ); Node.jsではBuffer.from(str, 'base64')import base64; base64.b64encode(data)とbase64.b64decode(data)echo -n "hello" | base64とecho "aGVsbG8=" | base64 --decode実際のセキュリティが必要な場合にBase64は適切ではありません——代わりに適切な暗号化を使用してください。また、オーバーヘッドが生じるため、直接バイナリストリームが使える大きなバイナリ転送には使用しないでください。バイナリカラム型(BLOB、BYTEA)をサポートするデータベースにデータを格納する場合は、Base64エンコードされたテキストよりも生のバイナリで保存する方が効率的です。
Base64を理解することで、APIドキュメントの読み方、ネットワークトラフィックのデバッグ方法、そして証明書・トークン・メディアを自信を持って扱う力が身につきます——あらゆるWeb開発者にとっての基礎スキルです。
無料のBase64エンコーダー・デコーダーを開く — テキストやバイナリデータを即座に変換。ブラウザ上で完全に動作し、サーバーには何も送信されません。