Base64エンコード・デコードの完全解説:概念から実践まで
Base64とは?
Base64は、バイナリデータをASCIIテキストに変換する方式です。64種類の印字可能文字(A-Z、a-z、0-9、+、/)で任意のバイナリを表現します。
なぜBase64が必要か?
多くのシステムはテキストしか扱えず、バイナリをそのまま送れません。
- 電子メール:SMTPは当初ASCIIテキストのみ
- URL:バイナリをそのまま埋め込めない
- JSON:画像データなどを直接入れられない
- HTML/CSS:インライン画像はテキスト形式が必要
Base64はバイナリをテキスト化し、こうした制約を解消します。
Base64のエンコード原理
基本手順
- 入力を 3バイト(24ビット)ずつに分割
- 各24ビットを 4つの6ビットに分ける
- 各6ビット(0-63)をBase64文字に対応
- 3バイトに満たない末尾は
=でパディング
エンコード表
| 値 | 文字 | 値 | 文字 | 値 | 文字 | 値 | 文字 |
|---|---|---|---|---|---|---|---|
| 0 | A | 16 | Q | 32 | g | 48 | w |
| 1 | B | 17 | R | 33 | h | 49 | x |
| ... | ... | ... | ... | ... | ... | ... | ... |
| 25 | Z | 41 | p | 57 | 5 | 63 | / |
例
入力: "Hello" (ASCII: 72 101 108 108 111)
2進数: 01001000 01100101 01101100 01101100 01101111
6ビット分割: 010010 000110 010101 101100 011011 000110 1111(00)
↓ ↓ ↓ ↓ ↓ ↓ ↓
インデックス: 18 6 21 44 27 6 60
文字: S G V s b G 8=
結果: "SGVsbG8="
実用シーン
1. インライン画像(Data URL)
小さな画像をBase64でHTML/CSSに埋め込み、HTTPリクエストを減らす:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..." />
.icon {
background-image: url(data:image/svg+xml;base64,PHN2Zy...);
}
注意:小さなアイコン(2KB未満)向け。大きな画像のインライン化はHTMLが肥大化します。
2. URLセーフなエンコード
標準Base64の + と / はURLで特別な意味を持ちます。URLセーフBase64では次のように置き換えます。
+→-/→_- パディング
=を省略
標準: a+b/c==
URLセーフ: a-b_c
Base64エンコード・デコード でURLセーフモードを選べます。
3. JWTトークン
JWT(JSON Web Token)の3部分はすべてBase64URLでエンコードされます。
Header.Payload.Signature
↑ ↑ ↑
Base64 Base64 HMAC
4. メール添付
MIMEメールの添付はBase64で送られます。
Content-Transfer-Encoding: base64
SGVsbG8gV29ybGQ=
5. 設定ファイルのシークレット
Kubernetesなどではバイナリ鍵をBase64で保存します。
apiVersion: v1
kind: Secret
data:
password: cGFzc3dvcmQ= # Base64エンコード
Base64の注意点
サイズが約33%増える
元: 3バイト → エンコード後: 4バイト (4/3 ≈ 1.33)
| 元のサイズ | Base64後 | 増加率 |
|---|---|---|
| 1 KB | 1.33 KB | +33% |
| 100 KB | 133 KB | +33% |
| 1 MB | 1.33 MB | +33% |
セキュリティの誤解
Base64は暗号化ではありません! 誰でもデコードできます。機密データの保護には使わないでください。
Base64("password") = "cGFzc3dvcmQ="
Base64Decode("cGFzc3dvcmQ=") = "password" ← すぐ復元できる
本当の暗号化には AES暗号化 や 国密SM4 を使ってください。
Base64の派生形式
Base32
32文字(A-Z、2-7)のみ、大文字。大文字小文字を区別しない環境(ファイル名など)向け。
Base58
ビットコイン界隈で設計。紛らわしい文字(0/O、1/I/l、+/)を除外し、手書きコピー向け。
Base85 / Ascii85
効率は高い(4バイト→5文字、約25%増)が、Base64ほど普及していません。
ToolsKuでBase64を使う
テキストのエンコード・デコード
- Base64ツール を開く
- テキストまたはBase64文字列を入力
- エンコードまたはデコードを選択
- 必要ならURLセーフモードをオン
画像をBase64に
画像→Base64 でData URLに変換できます。
一括処理
複数行をまとめて一度にエンコード・デコードできます。
よくある質問
デコード後に文字化けする?
元データがUTF-8テキストではない可能性があります。画像などのバイナリをテキストとして表示すると化けます。
URLでBase64が壊れる?
URLセーフ版(+//を-/_に、=を省略)を使ってください。
Base64とHexの使い分けは?
- Base64:増加約33%、転送向き
- Hex:約100%増だが読みやすく、デバッグ向き
Hexツール でHexの変換もできます。
まとめ
Base64は開発者にとって必須の知識です。ToolsKuでは Base64、Base32、Base58、Hex、URLエンコード に加え、本物の暗号化 AES、国密SM4 などをブラウザ内で安全に利用できます。