[РУКОВОДСТВО] 8 мин чтения

[РУКОВОДСТВО] Полный справочник Base64

Все, что нужно знать о кодировке Base64: теория, реализация и лучшие практики.

Январь 2025 | fundamentals

// ЧТО ТАКОЕ BASE64?

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

Набор символов Base64 включает A-Z, a-z, 0-9 и два дополнительных символа (обычно + и /), плюс = для заполнения.

// КАК РАБОТАЕТ BASE64

Кодирование Base64 работает путем взятия двоичных данных и преобразования их в строку символов ASCII. Процесс включает:

1. Разделение входных данных на 6-битные блоки (Base64 использует 6 битов на символ) 2. Сопоставление каждого 6-битного значения с символом в алфавите Base64 3. Добавление заполнения символами '=', если необходимо

// Пример: Кодирование 'Man' в Base64
// 'M' = 01001101, 'a' = 01100001, 'n' = 01101110
// Объединенно: 010011010110000101101110
// Разделено на 6-битные группы: 010011 010110 000101 101110
// Десятичные значения: 19, 22, 5, 46
// Символы Base64: T, W, F, u
// Результат: 'TWFu'

// РАСПРОСТРАНЕННЫЕ СЛУЧАИ ИСПОЛЬЗОВАНИЯ

  • > Встраивание изображений в HTML/CSS (data URI)
  • > Кодирование бинарных данных для JSON API
  • > Вложения электронной почты (кодирование MIME)
  • > Хранение бинарных данных в базах данных
  • > Токены аутентификации и API-ключи
  • > Безопасная передача данных для URL

// РЕАЛИЗАЦИЯ В JAVASCRIPT

Современные браузеры предоставляют встроенные функции кодирования и декодирования Base64:

Для кодирования текста в Base64 используйте btoa() (binary to ASCII). Для декодирования Base64 в текст используйте atob() (ASCII to binary).

// Кодирование текста в Base64
const text = 'Привет, Мир!';
const encoded = btoa(text);
console.log(encoded); // 0J/RgNC40LLQtdGCLCDQnNC40YAh

// Декодирование Base64 в текст
const decoded = atob(encoded);
console.log(decoded); // Привет, Мир!

// Для Unicode-строк используйте TextEncoder/TextDecoder
const encoder = new TextEncoder();
const decoder = new TextDecoder();

const unicodeText = 'Привет, 世界!';
const bytes = encoder.encode(unicodeText);
const base64 = btoa(String.fromCharCode(...bytes));
console.log(base64);

// ВОПРОСЫ БЕЗОПАСНОСТИ

Base64 НЕ является шифрованием или безопасностью. Это просто кодирование для представления данных. Важные заметки по безопасности:

Никогда не используйте Base64 в одиночку для защиты конфиденциальных данных. Всегда проверяйте входные данные Base64 для предотвращения атак внедрения. Помните, что Base64 увеличивает размер данных примерно на 33%.

  • > Base64 легко обратим — он не обеспечивает безопасность
  • > Всегда проверяйте и очищайте входные данные Base64
  • > Используйте правильное шифрование для конфиденциальных данных
  • > Рассмотрите URL-безопасные варианты Base64 для веб-приложений
  • > Остерегайтесь атак padding oracle в некоторых контекстах

// ЛУЧШИЕ ПРАКТИКИ

  • > Используйте URL-безопасный Base64 для веб-приложений (замените + на -, / на _)
  • > Всегда правильно обрабатывайте заполнение
  • > Проверяйте длину и символы входных данных
  • > Рассмотрите сжатие перед кодированием для больших данных
  • > Используйте потоковую обработку для очень больших наборов данных
  • > Реализуйте правильную обработку ошибок для неверных входных данных