JSON Webトークンなどで見られるBase64とBase64urlの違いは何ですか?
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)
以下に、標準からの定義を引用します。
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) =