Как работает кодировка Base64

Оглавление:

Как работает кодировка Base64
Как работает кодировка Base64
Anonim

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

Почему используется кодировка Base64?

Потребность в кодировании Base64 возникает из-за проблем, возникающих при передаче мультимедиа в необработанном двоичном формате в текстовые системы.

Поскольку текстовые системы (такие как электронная почта) интерпретируют двоичные данные как широкий диапазон символов, включая специальные командные символы, большая часть двоичных данных, передаваемых на носители, неправильно интерпретируется этими системами и теряется или искажается при передаче. процесс передачи.

Image
Image

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

Пример кодировки Base64

Например, возьмем три числа ASCII 155, 162 и 233. Эти три числа составляют двоичный поток 100110111010001011101001. Двоичный файл, как и изображение, содержит двоичный поток, состоящий из десятков или сотен тысяч нулей. и единицы.

Кодировщик Base64 начинает с разделения двоичного потока на группы из шести символов: 100110 111010 001011 101001. Каждая из этих групп преобразуется в числа 38, 58, 11 и 41.

Двоичный поток из шести символов преобразует двоичные (или с основанием 2) в десятичные (с основанием 10) символы путем возведения в квадрат каждого значения, представленного единицей в двоичной последовательности, с его позиционным квадратом. Начиная справа и двигаясь влево и начиная с нуля, значения в двоичном потоке представляют 2 ^ 0, затем 2 ^ 1, затем 2 ^ 2, затем 2 ^ 3, затем 2 ^ 4, затем 2 ^ 5.

Вот еще один способ взглянуть на это. Начиная слева, каждая позиция стоит 1, 2, 4, 8, 16 и 32. Если в ячейке двоичного числа стоит 1, вы добавляете это значение; если в слоте стоит 0, то нет. Двоичная строка 100110 преобразуется в десятичное число 38: 02^01 + 12^1 + 12^2 + 02^3 + 02^4 + 12^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 w
1 B 17 R 33 ч 49 x
2 С 18 S 34 я 50 y
3 D 19 Т 35 j 51 z
4 E 20 U 36 к 52 0
5 F 21 В 37 л 53 1
6 G 22 W 38 м 54 2
7 Н 23 Х 39 55 3
8 Я 24 Y 40 о 56 4
9 J 25 Z 41 р 57 5
10 К 26 а 42 q 58 6
11 L 27 б 43 р 59 7
12 М 28 c 44 s 60 8
13 N 29 d 45 т 61 9
14 О 30 е 46 u 62 +
15 П 31 ж 47 v 63 /

Решение эндшпиля

В конце процесса кодирования может возникнуть проблема. Если размер исходных данных в байтах кратен трем, все работает нормально. Если это не так, могут быть пустые байты. Для правильного кодирования требуется ровно 3 байта двоичных данных.

Решение состоит в том, чтобы добавить достаточно байтов со значением 0, чтобы создать 3-байтовую группу. Два таких значения добавляются, если для данных требуется один дополнительный байт данных, одно добавляется для двух дополнительных байтов.

Конечно, эти искусственные конечные 0 не могут быть закодированы с помощью приведенной ниже таблицы кодирования. Они должны быть представлены 65-м символом. Символ заполнения Base64 - это знак равенства (=), который помещается в конец закодированных данных.

Рекомендуемые: