Base64 は Web 開発のあちこちに登場します。埋め込み画像、JWT トークン、メールの添付ファイル、API のレスポンスなどです。仕組みを理解しておくと、多くの作業がぐっとわかりやすくなります。
Base64 とは
Base64 は、バイナリデータをテキストに変換する方式です。バイナリデータ(バイト列)を、印字可能な 64 種類の ASCII 文字だけで表します。
A–Z、a–z、0–9、+、/(パディングに =)
「Base64」という名前は、この 64 文字に由来します。バイナリデータの 3 バイトごとに、Base64 の 4 文字になります。
Base64 が必要な理由
多くのシステムはもともとテキストだけを扱うように作られています。メール(SMTP)、HTML の属性、JSON のフィールド、URL などです。こうしたテキストベースの仕組みの中にバイナリデータ(画像、PDF、生のバイト列)を入れるには、それを安全にテキストとして表す方法が必要です。
Base64 は、どんなバイナリデータも、テキストの解析器に誤解されない安全な印字可能文字の列に変換することで、この問題を解決します。
よくある使い道
HTML / CSS に画像を埋め込む
画像ファイルにリンクする代わりに、こう書けます。<img src="data:image/png;base64,iVBORw0KGgo..." />
1 ファイルで完結する HTML や、外部リンクがブロックされがちなメールテンプレートの小さなアイコンに便利です。
JSON Web Token(JWT)
JWT は、ドットで区切られた 3 つの Base64 エンコード部分でできています。Header.Payload.Signature
ヘッダーとペイロードは Base64 でエンコードされた JSON オブジェクトです。注意:暗号化ではなくエンコードなので、誰でもデコードできます。トークンの中身は ZapFile の JWT デコーダーで確認できます。
メールの添付ファイル(MIME)
メールの添付ファイルは、テキストのメールプロトコルの中に Base64 でエンコードされたバイナリとして埋め込まれています。これはメールソフトが自動で処理します。API のレスポンス
JSON はバイナリを直接扱えないため、一部の API は画像や PDF などを JSON の中の Base64 文字列として返します。HTTP Basic 認証
Authorization: Basic ヘッダーは、ユーザー名:パスワード を Base64 でエンコードしたものです。これは暗号化ではなく、ただのエンコードです。必ず HTTPS を使いましょう。
オンラインでエンコード・デコードする
ZapFile の Base64 エンコーダー / デコーダーでは、次のことができます。
- テキストやファイルを Base64 文字列にエンコードする
- Base64 文字列をテキストやダウンロード可能なファイルにデコードする
- 埋め込み画像の data URL をすぐにプレビューする
Base64 はデータを圧縮する?
いいえ、逆です。Base64 にするとデータは約 33% 大きくなります。3 バイトが 4 文字になるからです。Base64 は互換性のためのもので、圧縮のためではありません。
Base64 と Base64url
標準の Base64 は、URL では特別な意味を持つ + と / を使います。Base64url はこれを - と _ に置き換え、URL パラメーターや JWT トークンで安全に使えるようにしたものです。
まとめ
- Base64 は、バイナリデータをテキストベースのシステムで使うために印字可能な ASCII 文字で表す
- 埋め込み画像、JWT、メールの添付、API のレスポンスでよく使われる
- サイズは約 33% 増える。互換性のためで、圧縮のためではない
- JWT や Base64 文字列は ZapFile のツールですぐにデコードできます