Перейти к содержанию

Основы криптографии: хеширование и безопасная случайность

Начало урока

Основы криптографии: хеширование и безопасная случайность

Правильно применяйте криптографические примитивы стандартной библиотеки Python — и знайте их границы

Главная идея: реальным приложениям постоянно нужно проверять целостность, аутентифицировать сообщения, генерировать неугадываемые токены и безопасно хранить пароли. В Python есть корректные, проверенные временем инструменты для всего этого: hashlib, hmac и secrets. Навык не в том, чтобы писать криптографию, — а в том, чтобы выбрать нужный примитив и применить его без классических ошибок (использование random для безопасности, хранение сырых хешей как паролей или сравнение секретов через ==).
К концу вы сможете:
  • различать хеширование, шифрование и кодирование и выбирать нужное,
  • вычислять хеши контента через hashlib, включая большие файлы, читаемые блоками,
  • аутентифицировать сообщения через hmac и сравнивать секреты за постоянное время,
  • генерировать безопасные токены и случайные значения через secrets вместо random,
  • хранить пароли с помощью соли и медленной функции формирования ключа (scrypt / PBKDF2),
  • объяснить, почему нельзя изобретать собственную криптографию.

1. Три понятия, которые путают: хеширование, шифрование, кодирование

Прежде чем трогать API, зафиксируйте модель в голове. Эти три операции похожи (байты на входе, байты на выходе), но решают совершенно разные задачи.

ОперацияОбратима?Нужен ключ?Назначение
Кодирование (base64, hex, UTF-8)Да, тривиальноНетПредставить байты в другом алфавите. Не безопасность.
Хеширование (SHA-256)Нет (одностороннее)НетОтпечаток данных фиксированного размера; целостность, дедупликация, поиск.
Шифрование (AES)Да, с ключомДаСохранить данные конфиденциальными, читать могут только владельцы ключа.

Самая частая ошибка новичка — принимать кодирование за безопасность. Base64 — это не шифрование: любой раскодирует его одной строкой. И хеш — тоже не шифрование: нет ключа и нет способа вернуть оригинал. Хеш отвечает на вопрос «идентичны ли две вещи?» и «не подделаны ли данные?», но никогда — «скрой это, чтобы я прочитал позже».

Правило: нужно вернуть позже → шифрование. Нужно лишь проверить совпадение → хеширование. Просто сменить алфавит → кодирование. Этот курс охватывает хеширование и безопасную случайность; шифрование (AES-GCM / Fernet из пакета cryptography) — отдельная тема с управлением ключами.

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя