Base64 — это запись, а не шифрование
Base64 переписывает произвольные байты, пользуясь только A-Z, a-z, 0-9 и двумя символами. Три байта делятся на четыре группы по шесть бит, каждая из которых становится одним знаком, поэтому вывод примерно на треть длиннее ввода. Знаки равенства дополняют последнюю неполную группу.
Его назначение — проводить двоичные данные по каналам, принимающим только текст: вложения в письмах, изображения, встроенные прямо в страницу, учётные данные в заголовке HTTP. Это не даёт промежуточным системам испортить байты, которых они не ждали.
Многобайтовые символы сначала переводятся в UTF-8 и кодируются уже оттуда. Слово «мир» — шесть байт, потому что каждая кириллическая буква занимает два, и в Base64 оно даёт восемь символов, как шесть латинских букв. Поэтому длина результата ничего надёжного не говорит о числе исходных символов.
Не принимайте кодирование за защиту
Base64 разворачивает обратно кто угодно и мгновенно. Хранение пароля или токена в Base64 их не скрывает, а лишь делает неудобными для чтения, и они полностью открыты, как только попадают в журнал или резервную копию. Значениям, которые должны остаться тайными, нужно шифрование или хеширование.
Вставив сырой Base64 в URL, вы его сломаете. Знаки плюс и косая черта из стандартного набора значат в веб-адресе другое, поэтому для ссылок нужен безопасный вариант, где эти два знака заменены другими.
Неудача при декодировании — обычно вопрос длины или дополнения. Длина строки Base64 должна быть кратна четырём, а переводы строк и случайные пробелы, подхваченные при копировании, заставят разборщик её отвергнуть.