✉️ Пост 47. Шифрование, хэширование и кодирование - в чем разница? На собеседованиях очень любят задавать вопрос: "Чем отличается шифрование от хэширования?" И очень часто в ответ начинают путать еще и кодирование. Хотя это вообще три разные вещи, которые решают совершенно разные задачи. Давайте разберемся без заумных терминов.
🧠 Представим, что у нас есть строка password123 И посмотрим, что с ней происходит в каждом случае.
🔐 Шифрование (Encryption) Главная задача шифрования - скрыть информацию от посторонних. Есть данные: password123 Мы применяем алгоритм шифрования и получаем что-то вроде: A8#sd92K!mLq На первый взгляд - какой-то случайный набор символов. Но самое главное: 👉 эти данные можно восстановить обратно. Для этого нужен ключ. Получается такая схема: Исходные данные │ ▼ Шифрование │ ▼ Зашифрованные данные │ ▼ Расшифровка по ключу │ ▼ Исходные данные То есть шифрование - процесс обратимый.
🔑 Где используется шифрование? Например: 🔹 HTTPS Когда открываешь сайт банка, никто не может подсмотреть трафик.
🔹 VPN Чтобы провайдер не видел содержимое передаваемых данных.
🔹 Хранение персональных данных Например: номер паспорта номер карты адрес телефон Если злоумышленник украдет базу, он увидит только зашифрованные данные.
🧠 Самые популярные алгоритмы Симметричные: • AES • ChaCha20 Асимметричные: • RSA • ECC
#️⃣ Хэширование (Hashing) Теперь совсем другая история. Хэширование - это не способ спрятать данные. Это способ получить их цифровой отпечаток. Берем: password123 Получаем: ef92b778bafe771e... И всё. Обратно восстановить исходную строку уже нельзя. По крайней мере нормальными способами. Это необратимое преобразование.
🤔 Тогда зачем оно нужно? Например, для хранения паролей. Представь, что сайт хранит пароль в открытом виде. Базу взломали. Все пароли пользователей утекли. Очень плохо. Поэтому сохраняется не пароль, а его хэш. При входе пользователя происходит следующее: 1️⃣ пользователь вводит пароль 2️⃣ система снова вычисляет хэш 3️⃣ сравнивает с тем, что хранится в базе Если совпало - вход разрешен. Сам пароль база вообще не знает.
⚠️ Почему нельзя "расшифровать" хэш? Потому что это не шифрование. Хэш - это математическая функция. Она работает только в одну сторону. Можно получить: password123 │ ▼ SHA-256 │ ▼ ef92b778... Но обратно уже нельзя.
🧂 А что такое Salt? Очень любят спрашивать на собеседованиях. Допустим два пользователя выбрали пароль: 123456 Без соли получится одинаковый хэш. Это плохо. Поэтому перед вычислением добавляют случайную строку: 123456 + X8Q2LM Теперь даже одинаковые пароли дадут разные хэши. Это сильно усложняет взлом.
🔥 Где используют хэширование? ✅ хранение паролей ✅ проверка целостности файлов Например: скачал ISO-образ Linux проверил SHA-256 совпало - файл не поврежден.
✅ Git Каждый коммит - это тоже хэш.
✅ Kafka Хэш часто используется для выбора партиции по ключу.
📦 Кодирование (Encoding) А вот это вообще не про безопасность. Кодирование - это просто способ представить данные в другом формате. Например: Есть строка: Hello Закодируем ее в Base64. Получим: SGVsbG8= Но любой человек может выполнить обратную операцию и получить исходную строку. Никаких секретных ключей не нужно.
🤔 Тогда зачем кодирование вообще существует? Чтобы разные системы могли безопасно обмениваться данными. Например: изображения PDF ZIP бинарные файлы нельзя просто вставить в JSON. Поэтому используют Base64.
Еще примеры: URL Encoding Было: Привет мир Стало: Пр... Это нужно, чтобы браузеры и серверы правильно понимали специальные символы.
⚡ Простой способ запомнить 🔐 Шифрование "Спрятал и потом смог открыть."
#️⃣ Хэширование "Получил отпечаток, обратно уже не вернуть."
📦 Кодирование "Перевел данные в другой формат."