Безпека і криптографія / крок 02
Як працює Base64 і навіщо він потрібен
Про що це відео
Практичне продовження відео про хешування/кодування/шифрування (у чому різниця): автор демонструє Base64 у трьох реальних місцях, де ви щодня його зустрічаєте — токен JWT, заголовок HTTP Basic Auth і зображення, вбудоване в HTML як data URI — а тоді виводить кодування з перших принципів на планшеті й наживо декодує все в терміналі через base64 --decode. Його рамка: Base64 — це просто бінарні дані, подані як текст, придумані, щоб email (спершу лише текстовий) міг нести вкладення; за тією самою логікою отримуєте Base32 і Base16 (який і є просто hex). Усі приклади лежать у GitHub-репозиторії, посилання в описі, і він зазначає, що Base64 знову з’явиться у майбутніх відео про інвертований індекс.
Головне
- Основна конструкція: не можна знайти 256 (чи навіть 128) символів, які переживуть будь-яке кодування і будь-яку систему, а 64 — можна:
A–Z,a–z,0–9,+,/. Тож беремо бінарний потік по 6 бітів за раз: 3 байти (24 біти) стають 4 символами. Оскільки кожен символ потім передається як 8-бітний байт, дані ростуть на 8/6 ≈ 33%. - Демо 1, JWT: він генерує токен і показує, що клієнт абсолютно ТАКИ може прочитати його без секрету — заголовок (метадані алгоритму підпису) і payload (
user: Viktor) — це звичайний JSON, який декодується з Base64. JWT підписаний, а не зашифрований. Насправді він використовує base64url:+і/замінені на-і_, щоб токени влазили в URL,=— це padding, а.— безпечний роздільник, бо його немає в алфавіті. - Демо 2, HTTP Basic Auth: заголовок
Authorization: Basic …— це простоlogin:passwordу Base64 — декодується навіть вбудованими в браузерatob/btoa. Це фактично plaintext, надісланий із кожним запитом; «єдине, що мене захищає — це HTTPS — сам Basic Auth не додає нічого». - Демо 3, data URI: зображення, вбудоване прямо в HTML як
data:<mime-type>;base64,…— він кодує в base64 картинку жабки й підставляє її, лишаючи HTML-файл суто текстовим. - Base32 (5 бітів/символ, +60% розміру) має реальну нішу: його звичайний алфавіт нечутливий до регістру і без слешів, тож він безпечний для імен файлів і директорій навіть на регістронечутливих файлових системах;
0і1виключено, бо вони схожі наOіl. - Base16 — ЦЕ hex: 4 біти на символ, 2× розмір. Ви завжди бачили його в CSS-кольорах —
#FFFFFF— це байти, закодовані по два символи кожен. - Практичний висновок, що повертає до відео про індекси (UUID проти auto-increment): 32-символьний hex UUID — це Base16 — декодуй його, і те саме значення — це 16 сирих байтів, удвічі менше, що він доводить файлами на диску.