web-dev-qa-db-ja.com

文字列ベースのデータエンコーディング:Base64とBase64url

JSON Webトークンなどで見られるBase64とBase64urlの違いは何ですか?

8
Suragch

Base64とBase64urlはどちらも、バイナリデータを文字列形式でエンコードする方法です。あなたはbase64の理論について読むことができます ここ 。 Base64の問題は、+/、および=という文字が含まれていることです。これらは、一部のファイルシステム名とURLで予約された意味を持っています。そのため、base64urlは+-に、/_に置き換えることでこれを解決します。末尾の埋め込み文字=は不要な場合は削除できますが、URLでは% URLエンコードされる可能性が高くなります。次に、エンコードされたデータを問題なくURLに含めることができます。

ここに違いのチャートがあります:

Index  Base64  Base64Url

0      A       A 
1      B       B 
2      C       C 
3      D       D 
4      E       E 
5      F       F 
6      G       G 
7      H       H 
8      I       I 
9      J       J 
10     K       K 
11     L       L 
12     M       M 
13     N       N 
14     O       O 
15     P       P 
16     Q       Q 
17     R       R 
18     S       S 
19     T       T 
20     U       U 
21     V       V 
22     W       W 
23     X       X 
24     Y       Y 
25     Z       Z 
26     a       a 
27     b       b 
28     c       c 
29     d       d 
30     e       e 
31     f       f 
32     g       g 
33     h       h 
34     i       i 
35     j       j 
36     k       k 
37     l       l 
38     m       m 
39     n       n 
40     o       o 
41     p       p 
42     q       q 
43     r       r 
44     s       s 
45     t       t 
46     u       u 
47     v       v 
48     w       w
49     x       x
50     y       y
51     z       z
52     0       0
53     1       1
54     2       2
55     3       3
56     4       4
57     5       5
58     6       6
59     7       7
60     8       8
61     9       9
62     +       -
63     /       _

       =       (optional)

以下に、標準からの定義を引用します。

RCF 4648仕様

4。 Base 64エンコーディング

基数64の以下の説明は、、[4]、[5]、および[6]から派生しています。このエンコーディングは「base64」と呼ばれることがあります。

Base 64エンコーディングは、大文字と小文字の両方を使用できる形式でオクテットの任意のシーケンスを表すように設計されていますが、人間が読める必要はありません。

US-ASCIIの65文字のサブセットが使用され、6ビットの
印刷可能な文字ごとに表されます。 (余分な65番目の文字「=」は、特別な処理関数を示すために使用されます。)

エンコードプロセスは、4つのエンコードされた文字の出力文字列として入力ビットの24ビットグループを表します。左から右に向かって、3つの8ビット入力グループを連結することにより、24ビット入力グループが形成されます。これらの24ビットは、4つの連結された6ビットグループとして扱われ、それぞれがベース64アルファベットの単一の文字に変換されます。

各6ビットグループは、64の印刷可能な文字の配列へのインデックスとして使用されます。インデックスによって参照される文字は、
出力文字列。

                  Table 1: The Base 64 Alphabet

 Value Encoding  Value Encoding  Value Encoding  Value Encoding
     0 A            17 R            34 i            51 z
     1 B            18 S            35 j            52 0
     2 C            19 T            36 k            53 1
     3 D            20 U            37 l            54 2
     4 E            21 V            38 m            55 3
     5 F            22 W            39 n            56 4
     6 G            23 X            40 o            57 5
     7 H            24 Y            41 p            58 6
     8 I            25 Z            42 q            59 7
     9 J            26 a            43 r            60 8
    10 K            27 b            44 s            61 9
    11 L            28 c            45 t            62 +
    12 M            29 d            46 u            63 /
    13 N            30 e            47 v
    14 O            31 f            48 w         (pad) =
    15 P            32 g            49 x
    16 Q            33 h            50 y

エンコードされるデータの最後に24ビット未満しか利用できない場合は、特別な処理が実行されます。完全なエンコーディング量子は
常に数量の最後に完了します。入力が24未満の場合
ビットは入力グループで使用でき、値がゼロのビットが追加されます
(右側)6ビットグループの整数を形成します。パディング
データの最後では、「=」文字を使用して実行されます。以来
すべてのベース64入力はオクテットの整数であり、次の場合のみ発生します。

(1)入力をエンコードする最後の量は24ビットの整数倍です。ここでは、エンコードされた出力の最終単位は、「=」パディングのない4文字の整数倍になります。

(2)入力をエンコードする最後の量は正確に8ビットです。ここでは、エンコードされた出力の最終単位は2文字で、その後に2つの「=」パディング文字が続きます。

(3)エンコード入力の最後の量は正確に16ビットです。ここでは、エンコードされた出力の最終単位は3文字で、その後に1つの「=」パディング文字が続きます。

5。 URLとファイル名に安全なアルファベットを使用したBase 64エンコーディング

URLとファイル名セーフアルファベットを使用したBase 64エンコーディングは、[12]で使用されています。

63番目の文字として「〜」を使用する代替アルファベットが提案されています。一部のファイルシステム環境では「〜」文字が特別な意味を持つため、代わりにこのセクションで説明するエンコードをお勧めします。予約されていない残りのURI文字は「。」ですが、一部のファイルシステム環境では複数の「。」を使用できません。ファイル名に含まれるため、「。」魅力もない文字。

埋め込み文字「=」は、URI [9]で使用される場合、通常はパーセントエンコードされますが、データ長が暗黙的にわかっている場合、これは
パディングをスキップすることで回避されます。セクション3.2を参照してください。

このエンコーディングは、「base64url」と呼ばれることがあります。このエンコーディング
「base64」エンコーディングと同じものと見なすべきではありません。
「base64」とだけ呼ばれるべきではありません。明確にされていない限り
それ以外の場合、「base64」は前のセクションのbase 64を指します。

このエンコードは、表2に示すように、62:ndと63:rdのアルファベット文字を除いて、技術的には前のエンコードと同じです。

     Table 2: The "URL and Filename safe" Base 64 Alphabet

 Value Encoding  Value Encoding  Value Encoding  Value Encoding
     0 A            17 R            34 i            51 z
     1 B            18 S            35 j            52 0
     2 C            19 T            36 k            53 1
     3 D            20 U            37 l            54 2
     4 E            21 V            38 m            55 3
     5 F            22 W            39 n            56 4
     6 G            23 X            40 o            57 5
     7 H            24 Y            41 p            58 6
     8 I            25 Z            42 q            59 7
     9 J            26 a            43 r            60 8
    10 K            27 b            44 s            61 9
    11 L            28 c            45 t            62 - (minus)
    12 M            29 d            46 u            63 _
    13 N            30 e            47 v           (underline)
    14 O            31 f            48 w
    15 P            32 g            49 x
    16 Q            33 h            50 y         (pad) =
10
Suragch