Чому це важливо
Половина «зашифрованого» тексту в CTF — насправді просто закодований. Плутанина між цими трьома поняттями коштує годин. Запам'ятай різницю раз і назавжди.
1. Кодування (Encoding) — це НЕ безпека
Мета: представити дані в іншому форматі (для передачі/сумісності), а не сховати. Оборотне без ключа — будь-хто розкодує.
- Base64 —
SGVsbG8=(літери+цифри+/+=). Base32 — лише великі +2–7. - Hex —
48656c6c6f. URL-encoding —%20= пробіл. - Ознака: немає ключа, є характерний алфавіт.
Hello → base64 → SGVsbG8= (і назад без жодного пароля)
Якщо бачиш «зашифроване» без згадки про ключ — швидше за все, це кодування.
2. Шифрування (Encryption) — оборотне З КЛЮЧЕМ
Мета: сховати дані так, щоб прочитати міг лише власник ключа.
- Симетричне (один ключ на шифрування й дешифрування): AES, ChaCha20.
- Асиметричне (пара ключів: публічний/приватний): RSA, ECC.
"secret" + ключ → AES → 8f3a... (без ключа не прочитати)
Без правильного ключа — обчислювально неможливо (якщо алгоритм і ключ сильні).
3. Хешування (Hashing) — НЕЗВОРОТНЕ
Мета: отримати «відбиток» фіксованої довжини. Не можна відновити оригінал.
- SHA-256, SHA-512 — цілісність. bcrypt/argon2 — паролі (повільні навмисно).
- MD5/SHA-1 — застарілі (колізії), не для безпеки.
"password" → SHA-256 → 5e884898da... (назад — ніяк)
Як же «зламують» хеші? Не розшифровують, а перебирають: беруть слова зі словника, хешують і порівнюють (hashcat/john). Тому важливі сіль (salt) і повільні алгоритми.
Швидка шпаргалка
| Ключ? | Оборотне? | Приклад | |
|---|---|---|---|
| Кодування | ні | так, будь-ким | Base64, Hex |
| Шифрування | так | так, з ключем | AES, RSA |
| Хешування | ні | ні | SHA-256, bcrypt |
Практика: завдання Base32, ROT47, XOR та Atbash у Labs.