RFC 4648 - Base16、Base32、および Base64 データエンコーディング
- ステータス:Proposed Standard(提案標準)
- 発行日:2006 年 10 月
- ストリーム:IETF
- 廃止:RFC 3548
- エラッタ:No Errata
概要(Abstract)
本ドキュメントは、広く利用されている base 64、base 32、および base 16 エンコーディング方式について説明します。また、エンコードされたデータにおける改行の使用、エンコードされたデータにおけるパディングの使用、エンコードされたデータにおける非アルファベット文字の使用、異なるエンコーディングアルファベットの使用、および正規(canonical)エンコーディングについても議論します。
本メモのステータス(Status of This Memo)
本ドキュメントは、インターネットコミュニティ向けのインターネット標準トラックプロトコルを規定し、改善のための議論と提案を求めるものです。本プロトコルの標準化状態およびステータスについては、現在の「Internet Official Protocol Standards」(STD 1)を参照してください。本メモの配布に制限はありません。
著作権表示(Copyright Notice)
Copyright (C) The Internet Society (2006).
目次(Table of Contents)
主要セクション
- 1. 導入
- 2. 本書で使用する表記規約
- 3. 実装の相違点
- 3.1 エンコードされたデータ中の改行
- 3.2 エンコードされたデータのパディング
- 3.3 エンコードされたデータ中の非アルファベット文字の解釈
- 3.4 アルファベットの選択
- 3.5 正規エンコーディング
- 4. Base 64 エンコーディング
- 5. URL およびファイル名安全アルファベットを用いた Base 64 エンコーディング
- 6. Base 32 エンコーディング
- 7. 拡張 16 進アルファベットを用いた Base 32 エンコーディング
- 8. Base 16 エンコーディング
- 9. 図解と例
- 10. テストベクトル
- 11. Base64 の ISO C99 実装
- 12. セキュリティに関する考慮事項
- 13. RFC 3548 からの変更点
- 14. 謝辞
- 15. 複製条件
- 16. 参考文献
- 16.1 引用文献(Normative References)
- 16.2 参考情報(Informative References)
なぜ基数エンコーディングが重要なのか
基数エンコーディングはインターネットデータ通信の基礎です。バイナリデータをテキスト形式に変換することで、テキストのみの環境での送信と保存を可能にします。
主要なユースケース
| エンコーディング | 主な目的 | 典型的な用途 |
|---|---|---|
| Base64 | 汎用バイナリエンコーディング | MIME メール添付、JWT トークン、Data URI |
| Base64URL | URL 安全エンコーディング | JWT、OAuth トークン、URL パラメータ |
| Base32 | 人間が読みやすいエンコーディング | TOTP キー、Crockford エンコーディング |
| Base16 | 16 進エンコーディング | ハッシュ表示、デバッグ出力 |
Base64 クイックリファレンス
標準 Base64 エンコーディング
文字セット:A-Z、a-z、0-9、+、/
パディング文字:=
出力長:入力バイト数 × 4/3(4 の倍数に切り上げ)
例:
入力:"Hello"
出力:"SGVsbG8="
エンコード手順:
H e l l o
01001000 01100101 01101100 01101100 01101111
↓ 6 ビットごとにグループ化
010010 000110 010101 101100 011011 000110 1111
↓ 表を参照
S G V s b G 8=
Base64URL エンコーディング(RFC 4648 §5)
文字セット:A-Z、a-z、0-9、-、_
パディング文字:=(通常は省略)
標準 Base64 との違い:
+ → -
/ → _
用途:JWT、OAuth トークン、URL パラメータ
基数エンコーディング参照表
Base64 標準文字表
値 文字 値 文字 値 文字 値 文字
0 A 16 Q 32 g 48 w
1 B 17 R 33 h... 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /
パディング文字:=
Base32 標準文字表
値 文字 値 文字
0 A 16 Q
1 B 17 R
2 C 18 S
3 D 19 T
4 E 20 U
5 F 21 V
6 G 22 W
7 H 23 X
8 I 24 Y
9 J 25 Z
10 K 26 2
11 L 27 3
12 M 28 4
13 N 29 5
14 O 30 6
15 P 31 7
パディング文字:=
実世界のアプリケーション
JWT(JSON Web Token)
JWT 構造:
header.payload.signature
各部分は Base64URL でエンコードされる:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Data URI
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA..." />
MIME メール添付
Content-Type: application/pdf
Content-Transfer-Encoding: base64
JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC9UeXBlIC9DYXRhbG9n...
関連リソース
- 公式ソース:RFC 4648 (TXT)
- 公式ページ:RFC 4648 DataTracker
- エラッタ:RFC Editor Errata
関連 RFC
- RFC 2045 - MIME Part One(MIME の Base64 を定義)
- RFC 3548 - 基数エンコーディング(RFC 4648 により廃止)
- RFC 7515 - JSON Web Signature(Base64URL を使用)
- RFC 7519 - JSON Web Token(Base64URL を使用)