Skip to main content

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

Что такое декодирование? С кем можно работать? (Июль 2025)

Что такое декодирование? С кем можно работать? (Июль 2025)
Anonim

Если Интернет является информационной магистралью, то путь для электронной почты - это узкий овраг. Только очень маленькие тележки могут пройти.

Транспортная система электронной почты предназначена только для простого текста ASCII. Попытка отправить текст на другие языки или произвольные файлы - это как получить грузовик через овраг.

Как большой грузовик проходит через ущелье?

Тогда как вы отправляете большой грузовик через небольшой овраг? Вы должны разобрать куски на одном конце, транспортировать части через овраг и перестроить грузовик с кусков на другом конце.

То же самое происходит при отправке вложения файла по электронной почте. В процессе, известном как кодирование, двоичные данные преобразуются в текст ASCII, который может быть отправлен по электронной почте без проблем. На конце получателя данные декодируются и исходный файл перестраивается.

Одним из методов кодирования произвольных данных как простого текста ASCII является Base64. Это один из методов, используемых стандартом MIME для отправки данных, отличных от обычного текста.

Base64 для спасения

Кодировка Base64 занимает три байта, каждая из которых состоит из восьми бит и представляет их как четыре печатных символа в стандарте ASCII. Он делает это по существу двумя шагами.

Первым шагом является преобразование трех байтов в четыре числа из шести бит. Каждый символ в стандарте ASCII состоит из семи бит. Base64 использует только 6 бит (соответствует 2 ^ 6 = 64 символа), чтобы гарантировать, что закодированные данные могут быть распечатаны и доступны для людей. Ни один из специальных символов, доступных в ASCII, не используется.

64 символа (отсюда и имя Base64) - 10 цифр, 26 строчных символов, 26 символов верхнего регистра, а также «+» и «/».

Если, например, три байта составляют 155, 162 и 233, соответствующий (и пугающий) бит-поток равен 100110111010001011101001, что в свою очередь соответствует 6-битным значениям 38, 58, 11 и 41.

Эти числа преобразуются в символы ASCII на втором шаге, используя таблицу кодирования Base64. 6-битные значения нашего примера переходят к последовательности ASCII «m6Lp».

  • 155 -> 10011011
  • 162 -> 10100010
  • 233 -> 11101001
  • 100110 -> 38
  • 111010 -> 58
  • 001011 -> 11
  • 101001 -> 41
  • 38 -> m
  • 58 -> 6
  • 11 -> L
  • 41 -> p

Этот двухэтапный процесс применяется ко всей последовательности байтов, которые закодированы. Чтобы гарантировать, что закодированные данные могут быть правильно напечатаны и не превышают ограничение длины строки почтового сервера, вставляются символы новой строки, чтобы поддерживать длину строк ниже 76 символов. Символы новой строки кодируются, как и все другие данные.

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

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

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

Конечно, эти искусственные конечные «0» не могут быть закодированы с использованием таблицы кодирования ниже. Они должны быть представлены 65-м символом.

Символ заполнения Base64 равен '='. Естественно, он может появляться только в конце кодированных данных.

Таблица кодировки Base64

Значениеголец Значениеголец Значениеголец Значениеголец
0 16Q 32г 48вес
1В 17р 33час 49Икс
2С 18S 34я 50Y
3D 19T 35J 51Z
4Е 20U 36К 520
5F 21В 37L 531
6г 22W 38м 542
7ЧАС 23Икс 39N 553
8я 24Y 40о 564
9J 25Z 41п 575
10К 26 42Q 586
11L 27б 43р 597
12M 28с 44s 608
13N 29d 45T 619
14О 30е 46U 62+
15п 31е 47v 63/