0

デコード結果

Base64

エンコード結果

Base64
改行

Base64について

Base64は、7ビットの印字可能なASCII文字を使用した符号化方式です。主に電子メールにおいて、8ビットデータを7ビットデータパスで転送するために使用します。

Base64では、データを6ビットずつに分割し、それらを英数字(A-Z, a-z, 0-9)や記号(+, /)の文字に変換して表します。4文字ごとに変換し、最後が4文字に満たない場合はイコール記号(=)でパディングします。

また、RFC 1421 (PEM: Privacy-Enhanced Mail)では64文字ごとに改行、RFC 2045 (MIME)では76文字ごとに改行することが規定されています。

Base64の文字への変換表は以下のとおりです。

6ビットデータBase64文字
000000A
000001B
000010C
000011D
000100E
000101F
000110G
000111H
001000I
001001J
001010K
001011L
001100M
001101N
001110O
001111P
010000Q
010001R
010010S
010011T
010100U
010101V
010110W
010111X
011000Y
011001Z
011010a
011011b
011100c
011101d
011110e
011111f
100000g
100001h
100010i
100011j
100100k
100101l
100110m
100111n
101000o
101001p
101010q
101011r
101100s
101101t
101110u
101111v
110000w
110001x
110010y
110011z
1101000
1101011
1101102
1101113
1110004
1110015
1110106
1110117
1111008
1111019
111110+
111111/

例えば、「Hello」をBase64で変換すると以下のようになります。

1. 2進数表現にする。

01001000 01100101 01101100 01101100 01101111  (US-ASCII / UTF-8の場合)

2. 6ビットごとに区切る。6ビットに満たない場合は末尾を「0」でパディングする。

010010 000110 010101 101100 011011 000110 111100

3. 変換表を使用して文字に変換する。4文字ごとに変換し、4文字に満たない場合は末尾を「=」でパディングする。

SGVs bG8=

4. 文字を全て繋げてBase64の変換結果とする。

SGVsbG8=

EメールのMIMEメッセージヘッダー型式 (RFC 2047)

DenCodeでは、以下のようなMIMEメッセージヘッダー型式 (RFC 2047) のデコードもサポートします。この型式は、Eメールの件名や宛先などにASCII文字以外が含まれる場合に使用されます。

Subject: =?UTF-8?B?44K144Oz44OX44Or?=

デコードの後の結果は以下のとおりです。

Subject: サンプル

JSON Web Token (RFC 7519)

JSON Web Token (JWT) は、JSON形式のデータをBase64urlエンコードしてコンパクトに表現するトークン形式です。主にWebアプリケーションにおける認証・認可の仕組みとして広く使用されており、RFC 7519で標準化されています。

JWTは、ドット (.) で区切られた3つの要素から構成されます。

<ヘッダー>.<ペイロード>.<署名>

各要素の役割は以下のとおりです。

要素説明
ヘッダー (Header)トークンの種類 (typ) や署名アルゴリズム (alg) などのメタ情報を含むJSONオブジェクト
ペイロード (Payload)ユーザーIDや有効期限などの情報を含むJSONオブジェクト
署名 (Signature)ヘッダーとペイロードの改ざんを検出するための署名データ

ヘッダーとペイロードはそれぞれBase64urlエンコードされています。Base64urlは、標準のBase64と比べて、「+」を「-」に、「/」を「_」に置き換え、パディングの「=」を省略した形式です (RFC 4648)。これにより、URLやHTTPヘッダーに安全に含めることができます。

例えば、以下のJWTをデコードすると、ヘッダーとペイロードをそれぞれJSONとして取得できます。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
{
  "alg": "HS256",
  "typ": "JWT"
}
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

ヘッダーやペイロードに含まれる主なフィールド (クレーム) は以下のとおりです。

フィールド名称説明
algAlgorithm署名や暗号化に使用するアルゴリズム (HS256, RS256, ES256 など)
typTypeトークンの種類 (通常は "JWT")
ctyContent Typeペイロードのコンテンツタイプ (ネストされたJWTの場合は "JWT")
kidKey ID署名検証に使用する鍵の識別子
jkuJWK Set URL署名検証に使用するJWK Setの参照先URL
x5uX.509 URL署名検証に使用するX.509証明書チェーンの参照先URL
x5tX.509 Certificate SHA-1 Thumbprint署名検証に使用するX.509証明書のSHA-1サムプリント
フィールド名称説明
issIssuerトークンの発行者
subSubjectトークンの主体 (ユーザーIDなど)
audAudienceトークンの受信者
expExpiration Timeトークンの有効期限 (UNIXタイムスタンプ)
nbfNot Beforeトークンの有効開始日時 (UNIXタイムスタンプ)
iatIssued Atトークンの発行日時 (UNIXタイムスタンプ)
jtiJWT IDトークンの一意な識別子