基于字符串的数据编码:Base64 vs Base64url

时间:2019-03-28 02:14:57

标签: url base64 base64url

我在JSON Web令牌之类的东西中看到的Base64和Base64url有什么区别?

1 个答案:

答案 0 :(得分:2)

Base64和Base64url都是以字符串形式编码二进制数据的方法。您可以阅读有关base64 here的理论。 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 specs

  

4。 Base 64编码

     

以下对基数64的描述来自3,[4],[5],   和[6]。这种编码可以称为“ base64”。

     

Base 64编码旨在表示任意序列   八位位组的形式允许同时使用上限和上限   小写字母,但不必让人可读。

     

使用了US-ASCII的65个字符的子集,可以将6位作为
  每个可打印字符表示。 (额外的第65个字符“ =“,   用于表示特殊的处理功能。)

     

编码过程将输入位的24位组表示为   输出4个编码字符的字符串。从左到右   右边,通过串联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位;这里,   的          编码输出的最终单位将是两个字符,后跟          两个“ =”填充字符。

     

(3)编码输入的最终数量恰好是16位;这里,   的          编码输出的最终单位将是三个字符,后跟          一个“ =”填充字符。

     

5。使用URL和文件名安全字母进行Base 64编码

     

带有URL和文件名安全字母的Base 64编码具有   在[12]中使用过。

     

已建议使用“〜”作为替代字母   第63个字符。由于“〜”字符在   一些文件系统环境中,本节中描述的编码   建议使用此部分。剩余的未保留URI   字符为“。”,但某些文件系统环境不允许   多 ”。”在文件名中,因此为“。”字符   也没有吸引力。

     

填充字符“ =”通常用于百分号   URI [9],但如果隐式知道数据长度,则可以为
  通过跳过填充来避免;请参阅第3.2节。

     

此编码可以称为“ base64url”。这种编码
  不应被视为与“ base64”编码相同,并且
  不应仅被称为“ base64”。除非明确说明
  否则,“ base64”是指上一节中的base 64。

     

此编码在技术上与上一个相同,除了   表62中所示的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) =