ブラウザの開発者ツールを開いて任意のサイトのネットワークリクエストを見ると、ほぼ必ずBase64の長い文字列が見つかります——AuthorizationヘッダーのBearer token、CSSのdata URL、APIが返す画像フィールドなど。Base64はあらゆる場所にあります。
1. Base64とは?「なぜ必要か」から理解する
SMTP、HTTP/1.1などの初期プロトコルはプレーンテキスト(ASCII)の転送のみを想定していました。画像やPDFなどのバイナリデータを送るには、何らかの変換が必要です。Base64は3バイト(24ビット)のバイナリデータを4つの6ビット数値に再グループ化し、64文字のアルファベット(A–Z、a–z、0–9、+、/)で表現します。結果:あらゆるバイナリデータをテキスト文字で表現できます。
| 特性 | 説明 |
|---|---|
| 文字セット | A–Z(26)、a–z(26)、0–9(10)、+、/、計64文字 |
| パディング文字 | =、3の倍数に揃えるため |
| サイズ増加 | 元のデータより約33%大きくなる |
実際に試してみる:Base64エンコード/デコードツールで任意のテキストやデータをエンコード、またはBase64文字列をデコードできます。
2. メール添付ファイルの中のBase64(MIME)
SMTPプロトコルはもともと7ビットASCIIテキストのみをサポートしていました。添付ファイルの送信にはMIME規格が必要で、MIME添付ファイルは通常Base64でエンコードされています。「メールの原文を表示」すると見える長い文字列は、Base64エンコードされたファイル内容です。
3. JWT Token:ログインシステムで最も一般的なBase64
JWTは.で区切られた3つのBase64url部分で構成されています。最初の2つをデコードすると:
ヘッダー: {"alg":"HS256","typ":"JWT"}
ペイロード: {"sub":"user123","exp":1748000000}
重要:JWTの最初の2つの部分は暗号化されておらず、誰でもデコードして読めます。3番目の署名部分のみが改ざん検出に使用されます。JWTにパスワードや機密データを入れてはいけません。
JWTをデコード:JWTの第1または第2部分をBase64デコードツールに貼り付けると、JSON内容を直接確認できます。JSONフォーマッターで構造をより明確に読むこともできます。
4. Data URL:HTML/CSSに埋め込まれた画像
Data URLを使うと、ファイル全体をHTMLやCSSに直接埋め込むことができ、追加のHTTPリクエストが不要になります:
<img src="data:image/png;base64,iVBORw0KGgo...">
5. Base64に関するよくある誤解
- Base64は暗号化ではありません:エンコーディングです。鍵なしで誰でも即座にデコードできます
- Base64はデータを圧縮しません:むしろ約33%増加します
- 末尾の
=はアライメントパディングであり、暗号化記号ではありません - URLではBase64url変体を使用:
+と/の代わりに-と_
URLのエンコード処理:URLエンコード/デコードツールでURL内の特殊文字を変換できます。
まとめ
- Base64はバイナリデータを64のテキスト文字に変換し、テキストのみのプロトコルで転送可能にする
- メール添付(MIME)、JWT Token、Data URL、Basic Authが最も一般的な用途
- JWTのヘッダーとペイロードはBase64urlエンコードのみ——暗号化なし
- Base64は暗号化ではなく、データサイズは33%増加する