Base64 и URL-кодирование
Base64, base64url и URL-кодирование в обе стороны, с кириллицей и эмодзи.
Считается в браузере, на сервер ничего не уходит
Практика на машине
Лаба «Магазин после перевыпуска»
В терминале Linux
echo -n 'Привет' | base64
# 0J/RgNC40LLQtdGC
echo '0J/RgNC40LLQtdGC' | base64 -d
# Привет
base64 -w0 file.bin > file.b64
# файл в одну строку
curl -G example.com --data-urlencode 'q=права доступа'
# параметр в %-кодировке
Без -n echo добавит перевод строки, и Base64 выйдет другим.
УчтиBase64 — не шифрование: строку раскодирует любой, поэтому прятать в ней пароли бессмысленно.
Часть адреса или адрес целиком
Значение параметра кодируй как «часть адреса»: / ? & = тоже станут %XX. «Адрес целиком» их оставляет
и кодирует только пробелы, кириллицу и кавычки — так чинят ссылку. Пробел как + — только для
данных HTML-форм.
Частые вопросы
Base64 — это шифрование?
Нет: это только запись байтов, декодирует кто угодно. Секреты шифруют (gpg, openssl enc), а
Base64 применяют уже к результату.
Почему после декодирования — «кракозябры»?
Внутри не текст в UTF-8: картинка, архив, ключ или текст в CP1251. Двоичный файл декодируй в
терминале: base64 -d data.b64 > file.bin.
Зачем в конце знаки «=»?
Base64 кодирует байты тройками, и = добивает неполную тройку до четырёх символов. В base64url
их обычно отбрасывают.