Строковое кодирование данных: Base64 против Base64url - PullRequest
2 голосов
/ 28 марта 2019

В чем разница между Base64 и Base64url, которую я вижу в таких вещах, как веб-токены JSON?

1 Ответ

4 голосов
/ 28 марта 2019

И 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 взято из 3 , [4], [5], и [6]. Это кодирование может называться «base64».

Кодировка Base 64 предназначена для представления произвольных последовательностей. октетов в форме, которая позволяет использовать как верхний, так и верхний строчные буквы, но они не должны быть удобочитаемыми.

Используется 65-символьное подмножество US-ASCII, позволяющее 6 битам быть
представлены на печатный символ. (Лишний 65-й символ "=", используется для обозначения специальной функции обработки.)

Процесс кодирования представляет 24-битные группы входных битов в виде выходные строки из 4 кодированных символов. Исходя из слева в правильно, 24-битная входная группа формируется путем объединения 3 8-битных входные группы. Эти 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-битных групп. Перетяжка
в конце данные выполняются с использованием символа «=». С
все входы base 64 представляют собой целое число октетов, только следующие могут возникнуть случаи:

(1) Последний квант входного кодирования представляет собой целое кратное 24 бит; здесь конечная единица кодированного вывода будет интегральной кратно 4 символам без дополнения "=".

(2) Конечный квант входного кодирования составляет ровно 8 бит; Вот, конечная единица закодированного вывода будет двумя символами, сопровождаемыми два символа заполнения "=".

(3) Конечный квант входного кодирования составляет ровно 16 бит; Вот, конечная единица кодированного вывода будет состоять из трех символов, за которыми следует один символ заполнения "=".

5. Кодировка Base 64 с URL и именем файла Безопасный алфавит

Кодировка Base 64 с URL-адресом и безопасным алфавитом имени файла имеет использовался в [12].

Был предложен альтернативный алфавит, который использовал бы "~" в качестве 63-й персонаж. Поскольку символ "~" имеет особое значение в некоторые среды файловой системы, кодировка описана в этом раздел рекомендуется вместо. Оставшийся незарезервированный URI символ ".", но некоторые среды файловой системы не позволяют несколько "." в имени файла, таким образом, делая "." персонаж также непривлекательный.

Символ пэда "=" обычно кодируется в процентах при использовании в URI [9], но если длина данных известна неявно, это может быть
избегать, пропуская отступы; см. раздел 3.2.

Эта кодировка может называться «base64url».Эта кодировка
не должна рассматриваться как кодировка "base64", а
не должна именоваться только как "base64".Если не указано иное
, в противном случае «base64» относится к base 64 в предыдущем разделе.

Эта кодировка технически идентична предыдущей, за исключением букв алфавита 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) =
...