Криптография дает механизмы конфиденциальности, проверки целостности и подлинности. Шифрование скрывает данные с использованием ключа; криптографическое хеширование формирует отпечаток без операции расшифрования; кодирование меняет представление данных для хранения или передачи. Base64 — кодирование, а не защита секрета. Обычный хеш без доверенного эталона не подтверждает отправителя.
Какие задачи решает криптография и чем отличаются шифрование, хеширование и кодирование?
Конфиденциальность, целостность и подлинность; почему Base64 не защищает секрет, а хеш не является зашифрованной копией данных.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Криптография помогает строить защиту данных: скрывать содержимое, обнаруживать изменения и проверять происхождение сообщений. Разные механизмы решают разные задачи, поэтому важно не смешивать их названия.
Шифрование преобразует данные с использованием ключа так, чтобы уполномоченная сторона могла восстановить исходное содержимое. Оно используется для конфиденциальности. Проверка целостности зависит от выбранной схемы: само слово «зашифровано» не гарантирует защиту от изменения.
Криптографическое хеширование вычисляет отпечаток сообщения. У хеша нет операции расшифрования, возвращающей исходный текст. Требуемые свойства включают трудность поиска прообраза и коллизий, но не математическую невозможность угадать исходные данные. Слабый пароль можно подобрать, сравнивая хеши вариантов. Для хранения паролей поэтому используют специально предназначенные схемы, а не просто быстрый хеш.
Кодирование меняет представление данных по известным правилам. Например, Base64 представляет байты текстовыми символами и декодируется без секретного ключа; его назначение описано в RFC 4648. Закодированный токен не становится защищенным от чтения.
Также обычный хеш сообщения не доказывает, кто его отправил: атакующий может изменить и сообщение, и неподтвержденный хеш. Для подлинности нужны подходящие механизмы, например MAC с секретным ключом или цифровая подпись с проверенной связью ключа и субъекта.
Практический вопрос всегда начинается с цели: скрыть данные, проверить изменения или лишь передать бинарное содержимое через текстовый формат? После этого выбирают механизм и проверенный протокол.