Найти в Дзене

Кодировка Base64, что это такое и зачем нам это нужно

Народ, всем привет. Сегодня у нас немного сложная, но зато познавательная тема, с которой мы начнем изучать шифрование данных и их кодирование, для передачи в разных форматах. Это используется часто и каждый хоть раз сталкивался. И для начала мы поговорим про такой метод кодирования, как Base64, который используется для преобразования бинарных данных в текстовый формат. Он особенно популярен в тех случаях, когда данные необходимо передавать через каналы, не поддерживающие бинарные данные, например, в теле email-сообщений, в URL или в JSON-объектах. Формат Base64 обеспечивает совместимость и безопасность передачи данных, жертвуя при этом увеличением размера информации (примерно на 33%). Изначально Base64 появился как часть спецификаций MIME (Multipurpose Internet Mail Extensions) для кодирования бинарных вложений в email. Текстовые протоколы, такие как SMTP (о них мы поговорим в следующий раз, пока просто запомните), допускают только 7-битные символы ASCII, что делает невозможной прямую

Народ, всем привет. Сегодня у нас немного сложная, но зато познавательная тема, с которой мы начнем изучать шифрование данных и их кодирование, для передачи в разных форматах. Это используется часто и каждый хоть раз сталкивался. И для начала мы поговорим про такой метод кодирования, как Base64, который используется для преобразования бинарных данных в текстовый формат.

Он особенно популярен в тех случаях, когда данные необходимо передавать через каналы, не поддерживающие бинарные данные, например, в теле email-сообщений, в URL или в JSON-объектах. Формат Base64 обеспечивает совместимость и безопасность передачи данных, жертвуя при этом увеличением размера информации (примерно на 33%).

Изначально Base64 появился как часть спецификаций MIME (Multipurpose Internet Mail Extensions) для кодирования бинарных вложений в email. Текстовые протоколы, такие как SMTP (о них мы поговорим в следующий раз, пока просто запомните), допускают только 7-битные символы ASCII, что делает невозможной прямую передачу, например, изображений или исполняемых файлов. Base64 позволяет закодировать такие данные в строку, содержащую только символы, допустимые в ASCII, и не «потерять» их по дороге в сообщении.

-2

Суть работы Base64 заключается в следующем:

  • исходные данные (будь то текст или бинарный файл) берутся по 3 байта (то есть 24 бита), и эти 24 бита разбиваются на четыре группы по 6 бит (каждая 6-битная группа может содержать значение от 0 до 63)
  • далее каждому из этих значений сопоставляется определённый символ из таблицы Base64, состоящей из 64 символов: латинских букв в верхнем и нижнем регистрах, цифр и двух дополнительных символов (обычно это "+" и "/")
  • таким образом, каждый набор из 3 байт исходных данных превращается в 4 символа Base64, и если количество исходных байт не кратно трём, то в конец добавляются символы = как заполнители, чтобы результат соответствовал нужной длине и мог быть правильно декодирован.

Набор символов Base64 выглядит следующим образом:

A–Z (26 символов)
a–z (26 символов)
0–9 (10 символов)
+ и /

Итого 64 символа. Иногда, в URL-кодировании или других специфических форматах, символы + и / заменяются на другие, например, - и _, чтобы избежать проблем с интерпретацией в адресной строке браузера. Такая версия называется URL-safe Base64.

-3
Если Вам нравятся наши статьи, и вы хотите отблагодарить автора (на развитие канала), нам будет очень приятно!

Допустим, мы хотим закодировать строку Man. ASCII-коды символов:

M = 77 = 01001101
a = 97 = 01100001
n = 110 = 01101110
Объединяя все вместе: 01001101 01100001 01101110 — 24 бита
Далее, разделим на 4 группы по 6 бит: 010011 010110 000101 101110
В десятичном виде: 19, 22, 5, 46
По таблице символов Base64: 19 = T, 22 = W, 5 = F, 46 = u
Итог: строка Man становится TWFu.

Если входные данные не делятся на 3 байта ровно, используется заполнение. Например, если мы кодируем слово Ma, то у нас есть только 2 байта:

M = 77 = 01001101
a = 97 = 01100001
Это 16 бит. Для получения 24 бит добавляем 8 нулей: 01001101 01100001 00000000
Разделяем: 010011 010110 000100 000000
В десятичном виде: 19, 22, 4, 0
Символы Base64: 19 = T, 22 = W, 4 = E, 0 = A
Но так как последний байт был добавлен искусственно, заменим последний символ на =:
Результат — TWE=

Если в исходной строке только один байт, то добавляется два символа =. Например, M станет TQ==.

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

-4

Зачем вам вообще все это надо?

  1. Email (SMTP, MIME) — вложения и нестандартные символы в теле письма кодируются Base64 для корректной передачи.
  2. HTTP и URL — некоторые API передают данные (например, изображения или PDF) в виде строки Base64.
  3. JSON/XML — бинарные данные, включаемые в структуры текстовых форматов, кодируются в Base64.
  4. JWT (JSON Web Tokens) — заголовок и полезная нагрузка токена кодируются в Base64Url.
  5. Кеширование и шифрование — результат работы алгоритмов, возвращающих бинарные строки, удобно сериализовать в текстовом виде через Base64.
-5

Кстати, у нас есть и другой канал, FIT FOR FUN, про фитнес, бодибилдинг, правильное питание, похудение и ЗОЖ в целом. Кому интересно, ждем вас в гости!