メインコンテンツまでスキップ

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)​

主要セクション​


なぜ基数エンコーディングが重要なのか​

基数エンコーディングはインターネットデータ通信の基礎です。バイナリデータをテキスト形式に変換することで、テキストのみの環境での送信と保存を可能にします。

主要なユースケース​

エンコーディング主な目的典型的な用途
Base64汎用バイナリエンコーディングMIME メール添付、JWT トークン、Data URI
Base64URLURL 安全エンコーディングJWT、OAuth トークン、URL パラメータ
Base32人間が読みやすいエンコーディングTOTP キー、Crockford エンコーディング
Base1616 進エンコーディングハッシュ表示、デバッグ出力

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​

  • RFC 2045 - MIME Part One(MIME の Base64 を定義)
  • RFC 3548 - 基数エンコーディング(RFC 4648 により廃止)
  • RFC 7515 - JSON Web Signature(Base64URL を使用)
  • RFC 7519 - JSON Web Token(Base64URL を使用)