Пояснено кодування Base64: що це таке та коли його використовувати
Base64 є скрізь у веб-розробці — вбудований у заголовки електронної пошти, запікається в URI даних, використовується в маркерах автентифікації та обертається навколо двійкових файлів у текстових протоколах. Але що це насправді? І якщо він кодує дані, хіба це не робить його безпечним? Відповідь — ні: Base64 — це кодування, а не шифрування. Це спосіб представлення двійкових або довільних даних у вигляді звичайного тексту ASCII, нічого більше. Розуміння того, коли і навіщо його використовувати, може прояснити багато незрозумілих моментів у розробці.
Що таке Base64?
Base64 — це метод кодування двійкових даних у 64 безпечних символи ASCII — літери A–Z, a–z, цифри 0–9, знаки «плюс» і косі риски. Він працює, приймаючи двійкові дані (текст, зображення чи необроблені байти) і розбиваючи їх на 6-бітні фрагменти. Кожна частина стає індексом в алфавіті Base64, тому на виході завжди читається текст. «64» означає розмір алфавіту: 26 + 26 + 10 + 2 = 64 символи.
Чому 64? Оскільки ці символи безпечні майже в усіх системах — електронної пошти, старих терміналів, XML, JSON і простого тексту. Двійковий файл може пошкодитися під час передавання, якщо спеціальні байти неправильно інтерпретуються; Base64 гарантує, що вихідні дані залишаться незмінними через будь-який текстовий канал. Ви можете кодувати та декодувати Base64 миттєво у вашому браузері без завантаження ваших даних куди-небудь.
Base64 не є шифруванням
Це критична відмінність: Base64 кодує вигляд даних, але будь-хто може змінити це. Якщо ви кодуєте пароль за допомогою Base64 secret123, це стає c2VjcmV0MTIz — але це небезпечно. Розшифровка така ж тривіальна. Base64 — це обфускація для передачі, а не захист для безпеки. Якщо вам потрібно зберегти дані в секреті, використовуйте шифрування (наприклад, AES), а не Base64. Base64 — це спосіб безпечного надсилання зашифрованих даних через текстовий канал, але це не саме шифрування.
Загальне використання Base64
Base64 є стандартним у кількох сценаріях реального світу:
- URI даних. Замість посилання на файл зображення ви можете вставити зображення безпосередньо в HTML або CSS як URI даних:
data:image/png;base64,iVBORw0KG…. Це дозволяє уникнути додаткових HTTP-запитів, що корисно для маленьких піктограм або коли ресурси не можна розмістити окремо. - Вкладення електронної пошти. SMTP (протокол електронної пошти) розроблено для тексту. Двійкові вкладення кодуються за допомогою Base64 перед надсиланням, а потім декодуються вашим поштовим клієнтом після отримання.
- Маркери автентифікації. Багато API використовують Base64 для маркерів — не для безпеки, а тому, що маркери часто є двійковими даними, які потрібно передавати як читабельний текст у заголовках або URL-адресах.
- Вбудовування файлів у JSON або XML. Якщо вам потрібно включити двійковий блоб (PDF, електронну таблицю, архів) у відповідь JSON API, Base64 кодує його як рядок, який не порушує структуру JSON.
Накладні витрати на розмір: Base64 збільшує дані
Недоліки: вивід Base64 приблизно на 33% більший, ніж вихідний двійковий файл. Це пояснюється тим, що ви упаковуєте 8 біт вхідних даних у 6-бітні фрагменти, а доповнення потрібне, коли довжина вхідних даних не кратна 3. Отже, якщо ви вставляєте зображення розміром 300 КБ як URI даних, версія Base64 має приблизно 400 КБ — повільніше завантажується й аналізується. Для маленьких піктограм ці накладні витрати варті збереженого HTTP-запиту; для великих файлів зазвичай краще пов’язувати їх окремо.
Варіанти та відповідні кодування
Стандартне використання Base64 + і /, які мають спеціальні значення в URL-адресах і назвах файлів. URL-безпечний Base64 замінники - і _ натомість це робить його безпечним для використання в шляхах і рядках запитів без відсоткового кодування. Якщо ви створюєте спеціальну схему кодування URL-адреси, подумайте про те, чи потрібно Кодування URL або URL-безпечний Base64 відповідає вашим потребам.
Base64 — це одне з кількох кодувань, які вирішують різні проблеми. Шістнадцяткове кодування представляє двійковий код у вигляді двох читабельних символів на байт (повільніше для декодування, але без доповнення та для читання людиною), часто використовується в хешах і контрольних сумах. Сутності HTML кодувати спеціальні символи, наприклад < і & тому вони правильно відображаються на веб-сторінках — проблема відрізняється від довільного бінарного транспорту. Кожне кодування є інструментом для певної роботи.