代码之家  ›  专栏  ›  技术社区  ›  Suragch Shmidt

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

  •  1
  • Suragch Shmidt  · 技术社区  · 7 年前

    1 回复  |  直到 7 年前
        1
  •  44
  •   Suragch Shmidt    7 年前

    Base64和Base64url都是以字符串形式编码二进制数据的方法。你可以阅读base64的理论 here + , / ,和 = + 具有 - 具有 _ . 尾随填充字符 可以在不需要的时候消除,但是在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.基64编码

    以下对基64的描述源自 3 , [4], [5],

    八位字节的一种形式,允许同时使用上下位和下下位

    使用US-ASCII的65个字符子集,使6位
    用于表示特殊的处理功能。)

    编码过程将输入位的24位组表示为 输出4个编码字符的字符串。从左到右 输入组。然后将这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时
    位在输入组中可用,值为零的位相加

    最后,使用“=”字符执行数据。自

    (1) 编码输入的最后一个量是 24 位;这里,编码输出的最后一个单位是整数 不带“=”填充的4个字符的倍数。

    这个 编码输出的最终单位是两个字符,后跟 两个“=”填充字符。

    (3) 编码输入的最终量正好是16位;在这里, 这个 编码输出的最终单位是三个字符,后跟

    5.使用URL和文件名安全字母表的Base 64编码

    已在[12]中使用。

    有人建议用“~”作为替代字母 第63个字符。因为“~”字在英语中有特殊的含义 字符是“.”,但某些文件系统环境不允许 在文件名中有多个“.”,从而使“.”字符

    填充字符“=”通常用百分比编码
    避免跳过填充物;见第3.2节。


    不应视为与“base64”编码相同
    不应仅称为“base64”。除非澄清
    否则,“base64”是指上一节中的base64。

    此编码在技术上与前一个相同,只是 对于62:nd和63:rd字母字符,如表2所示。

         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) =
    
    推荐文章