Base64
Base64 — двоично-текстовое кодирование, которое представляет байты с помощью алфавита из 64 символов.
Определение
Base64 — способ представить произвольные байты текстом для передачи через системы, рассчитанные на текстовые данные. Стандартный алфавит содержит латинские буквы в верхнем и нижнем регистре, цифры, + и /; в конце может стоять заполнитель =.
Base64 меняет только представление данных. Само по себе оно не обеспечивает секретность, аутентичность или целостность и декодируется без ключа.
Как это работает
Кодировщик берёт 3 байта, делит их 24 бита на четыре 6-битных значения и заменяет каждое одним из 64 символов. Если в последней группе только 1 или 2 байта, недостающую часть обычно отмечают знаком =, чтобы длина результата была кратна четырём.
Для больших объёмов результат примерно на треть длиннее исходных байтов. В Base64url символы + и / заменены на - и _, а заполнение часто опускают, поэтому варианты не всегда взаимозаменяемы.
Практический пример
Строке Hi в ASCII и UTF-8 соответствуют байты 48 69 в шестнадцатеричной записи. В стандартном Base64 они выглядят как SGk=. Декодирование вернёт те же байты, а их интерпретация как UTF-8 — текст Hi.
В Base64 также можно представить изображение, сжатые данные или шифротекст, поэтому успешное декодирование не обязано давать читаемый текст.
Форматы и частые ошибки
Системы должны одинаково понимать вариант Base64, обязательность заполнения и допустимость пробельных символов. Один декодер может отклонить строку, которую принимает другой. Перед кодированием текста его переводят в байты с помощью кодировки символов, например UTF-8; другая кодировка даст другой результат.
Нет. Base64 — общедоступное обратимое кодирование без секретного ключа. Конфиденциальные данные сначала нужно защитить подходящей криптографической схемой, а уже затем при необходимости представить её байты в Base64.
Заполнение дополняет последнюю группу из четырёх символов, если число исходных байтов не делится на три. Возможны один или два знака заполнения, а некоторые форматы их опускают.
Они одинаково группируют биты, но Base64url использует безопасные для URL символы и часто обходится без заполнения. Нужно выбирать вариант, который требует конкретный протокол.