Как работает кодировка Base64
Кодирование Base64 - это процесс преобразования двоичных данных в строковый формат ASCII путем преобразования этих двоичных данных в 6-битное символьное представление. Метод кодирования Base64 используется, когда двоичные данные, такие как изображения или видео, передаются по системам, которые предназначены для передачи данных в формате обычного текста (ASCII).
Почему используется кодировка Base64?
Необходимость кодирования Base64 возникает из-за проблем, возникающих при передаче мультимедиа в необработанный двоичный формат в текстовые системы.
Поскольку текстовые системы (например, Эл. адрес) интерпретировать двоичные данные как широкий диапазон символов, включая специальные командные символы, большую часть двоичных данных то, что передается на носитель передачи, неправильно интерпретируется этими системами и теряется или искажается при передаче процесс.

Один из методов кодирования таких двоичных данных, позволяющий избежать таких проблем с передачей, - это их отправка в виде простого текста ASCII в кодированном формате Base64. Это один из методов, используемых стандартом MIME для отправки данных, отличных от обычного текста.
Многие языки программирования, такие как PHP и Javascript, включают функции кодирования и декодирования Base64 для интерпретации данных, передаваемых с использованием кодировки Base64.
Логика кодирования Base64
Кодировка Base64 разбивает двоичные данные на 6-битные сегменты по 3 полных байта и представляет их как печатаемые символы в стандарте ASCII. По сути, это происходит в два этапа.
Первый шаг - разбить двоичную строку на 6-битные блоки. Base64 использует только 6 бит (что соответствует 2 ^ 6 = 64 символам), чтобы обеспечить возможность печати и чтения кодированных данных. Ни один из специальных символов, доступных в ASCII, не используется.
64 символа (отсюда и название Base64) - это 10 цифр, 26 символов в нижнем регистре, 26 символов в верхнем регистре, а также знак плюса (+) и косая черта (/). Существует также 65-й персонаж, известный как подушечка, который является знаком равенства (=). Этот символ используется, когда последний сегмент двоичных данных не содержит полных 6 бит.
Пример кодировки Base64
Например, возьмите три числа ASCII 155, 162 и 233. Эти три числа составляют двоичный поток 100110111010001011101001. Двоичный файл, как и изображение, содержит двоичный поток, состоящий из десятков или сотен тысяч нулей и единиц.
Кодер Base64 начинает с разделения двоичного потока на группы из шести символов: 100110 111010 001011 101001. Каждая из этих групп переводится в числа 38, 58, 11 и 41.
Шестизначный двоичный поток преобразует двоичные (или основание-2) в десятичные (основание-10) символы путем возведения в квадрат каждого значения, представленного 1 в двоичной последовательности, с его позиционным квадратом. Начиная справа и двигаясь влево и начиная с нуля, значения в двоичном потоке представляют 2 ^ 0, затем 2 ^ 1, затем 2 ^ 2, затем 2 ^ 3, затем 2 ^ 4, затем 2 ^ 5.
Вот еще один способ взглянуть на это. Начиная слева, каждая позиция стоит 1, 2, 4, 8, 16 и 32. Если двоичное число имеет 1 в слоте, вы добавляете это значение; если в слоте стоит 0, вы этого не сделаете. Двоичная строка 100110 преобразуется в десятичное число 38: 0 * 2 ^ 01 + 1 * 2 ^ 1 + 1 * 2 ^ 2 + 0 * 2 ^ 3 + 0 * 2 ^ 4 + 1 * 2 ^ 5 = 0 + 2 + 4 + 0 + 0 + 32.
Кодировка Base64 берет эту двоичную строку и разбивает ее на 6-битные значения 38, 58, 11 и 41.
Наконец, эти числа преобразуются в символы ASCII с использованием таблицы кодировки Base64. 6-битные значения этого примера преобразуются в последовательность ASCII. m6Lp.
Используя таблицу преобразования Base64:
- 38 м
- 58 это 6
- 11 - это L
- 41 это п
Этот двухэтапный процесс применяется ко всей кодируемой двоичной строке.
Чтобы закодированные данные могли быть правильно напечатаны и не превышали лимит длины строки почтового сервера, вставляются символы новой строки, чтобы длина строки не превышала 76 символов. Символы новой строки кодируются так же, как и все другие данные.
Вся цель кодирования Base64, от добавления заполнения для сохранения 3-байтовых двоичных сегментов до преобразование двоичного файла в текст с использованием таблицы Base64, заключается в сохранении целостности передаваемого двоичного файла Информация.
Таблица кодировки Base64
В следующей таблице приведены все 64 символа, используемые в кодировке Base64.
Таблица кодировки Base64 | |||||||
---|---|---|---|---|---|---|---|
Ценить | Char | Ценить | Char | Ценить | Char | Ценить | Char |
0 | А | 16 | Q | 32 | грамм | 48 | ш |
1 | B | 17 | р | 33 | час | 49 | Икс |
2 | C | 18 | S | 34 | я | 50 | у |
3 | D | 19 | Т | 35 | j | 51 | z |
4 | E | 20 | U | 36 | k | 52 | 0 |
5 | F | 21 | V | 37 | л | 53 | 1 |
6 | грамм | 22 | W | 38 | м | 54 | 2 |
7 | ЧАС | 23 | Икс | 39 | п | 55 | 3 |
8 | я | 24 | Y | 40 | о | 56 | 4 |
9 | J | 25 | Z | 41 | п | 57 | 5 |
10 | K | 26 | а | 42 | q | 58 | 6 |
11 | L | 27 | б | 43 | р | 59 | 7 |
12 | M | 28 | c | 44 | s | 60 | 8 |
13 | N | 29 | d | 45 | т | 61 | 9 |
14 | О | 30 | е | 46 | ты | 62 | + |
15 | п | 31 | ж | 47 | v | 63 | / |
Решение эндшпиля
В конце процесса кодирования может возникнуть проблема. Если размер исходных данных в байтах кратен трем, все работает нормально. В противном случае могут быть пустые байты. Для правильного кодирования необходимо ровно 3 байта двоичных данных.
Решение состоит в том, чтобы добавить достаточно байтов со значением 0 для создания 3-байтовой группы. Два таких значения добавляются, если для данных требуется один дополнительный байт данных, одно добавляется для двух дополнительных байтов.
Конечно, эти искусственные завершающие "0" нельзя закодировать с помощью приведенной ниже таблицы кодирования. Они должны быть представлены 65-м символом. Символ заполнения Base64 представляет собой знак равенства (=) и помещается в конец закодированных данных.