Base64(ベースろくじゅうし)は、バイナリデータをテキスト形式に変換するエンコード方式です。画像・ファイル・バイナリデータを、テキストしか扱えない場所で安全に送受信するために使われます。
Base64とは
コンピュータのデータはすべて0と1のバイナリです。メール・JSON・URLなどテキストベースのプロトコルは、バイナリデータをそのまま扱えないことがあります。
Base64は、あらゆるバイナリデータを A–Z・a–z・0–9・+・/ の64文字と、パディング用の = だけで表現します。どんなデータでもこの文字セットに変換することで、テキスト環境で安全に扱えるようになります。
元データ: Hello
Base64: SGVsbG8=
## 主な使い道
メール添付ファイル
MIME形式のメールでは、添付ファイルをBase64でエンコードしてテキストとして送信します。メールプロトコルが元々テキスト専用だったことが理由です。現在も内部的にBase64が使われています。
Data URI(CSSやHTMLに画像を埋め込む)
小さな画像をHTMLやCSSに直接埋め込む際に使います。HTTPリクエストを削減できます。
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==">
.icon {
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz...");
}
### JWT(JSON Web Token)
認証で使われるJWTはヘッダー・ペイロード・署名の3パーツをBase64URL(URL-safe版)でエンコードして . でつないだ形式です。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0In0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
### APIレスポンスのバイナリデータ
JSONはバイナリを直接格納できないため、画像や証明書をAPIで返す際にBase64でエンコードする設計がよく使われます。
Basic認証
HTTPのBasic認証では、ユーザー名とパスワードを : でつないでBase64エンコードして送信します。
Authorization: Basic dXNlcjpwYXNzd29yZA==
注意: Base64は暗号化ではありません。デコードすれば元の値が取り出せます。Basic認証は必ずHTTPS通信上で使ってください。
エンコードの仕組み
Base64は3バイト(24ビット)を6ビットずつ4文字に変換します。
元データ: M a n
バイナリ: 01001101 01100001 01101110
6bit分割: 010011 010110 000101 101110
変換後: T W F u
結果: TWFu
3バイトが4文字になるため、データサイズは元の約33%増になります。
Base64とBase64URLの違い
標準のBase64は + と / を使いますが、URLに含めると %2B・%2F とエンコードされてしまいます。Base64URLはこれを - と _ に置き換えた URL-safe なバリアントです。JWTやOAuthではBase64URLが使われます。
| 種類 | 文字セット | 用途 |
|---|---|---|
| Base64 | A–Z a–z 0–9 + / | メール・ファイル |
| Base64URL | A–Z a–z 0–9 - _ | JWT・URL・クッキー |
Base64エンコード・デコードツールでは、テキストのBase64エンコード・デコードとファイルのData URI変換をブラウザ内で処理できます。URL-safeモードの切り替えも対応しています。