Обзор библиотеки криптографии Python
Настройте низкоуровневые hazmat-примитивы и высокоуровневые примитивы; изучите структуру библиотеки
«Обзор библиотеки криптографии Python» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.
Зачем нужна библиотека cryptography?
Библиотека Python cryptography (разработанная PyCA) предоставляет как высокоуровневый интерфейс Fernet, так и низкоуровневые примитивы hazmat. Она оборачивает OpenSSL и является стандартом сообщества для промышленной криптографии в Python.
Установка и структура
Установите: pip install cryptography. Два слоя: cryptography.fernet (безопасное симметричное шифрование с заданными безопасными настройками) и cryptography.hazmat.primitives (AES, RSA, EC, хеш-функции, HMAC — используйте с осторожностью).
Fernet: безопасное симметричное шифрование
Fernet использует AES-128-CBC + HMAC-SHA256 с временной меткой. Он автоматически выполняет генерацию IV, дополнение и вычисление MAC. Идеально подходит для шифрования значений конфигурации, токенов или небольших блоков данных.
from cryptography.fernet import Fernet
# Generate a URL-safe base64-encoded 32-byte key
key = Fernet.generate_key()
f = Fernet(key)
token = f.encrypt(b"my secret data")
print("Encrypted:", token[:40], "...")
plain = f.decrypt(token)
print("Decrypted:", plain)Примитивы hazmat: хеш-функции
Слой hazmat предоставляет SHA-2, SHA-3, BLAKE2 и другие алгоритмы:
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.backends import default_backend
digest = hashes.Hash(hashes.SHA256(), backend=default_backend())
digest.update(b"Hello, ")
digest.update(b"world!")
result = digest.finalize()
print("SHA-256:", result.hex())Примитивы hazmat: HMAC
HMAC для аутентификации сообщений:
from cryptography.hazmat.primitives import hmac, hashes
import os
key = os.urandom(32)
h = hmac.HMAC(key, hashes.SHA256())
h.update(b"authenticated message")
signature = h.finalize()
print("HMAC-SHA256:", signature.hex())
# Verify
h2 = hmac.HMAC(key, hashes.SHA256())
h2.update(b"authenticated message")
h2.verify(signature) # raises if invalidСериализация ключей
Сериализуйте ключи в PEM/DER для хранения или передачи:
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
pem = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.BestAvailableEncryption(b"passphrase")
)
print(pem[:60])Загрузка ключей из PEM
Загрузите ключ PEM с диска:
from cryptography.hazmat.primitives.serialization import load_pem_private_key
with open("private_key.pem", "rb") as f:
pem_data = f.read()
key = load_pem_private_key(pem_data, password=b"passphrase")
print("Key loaded, size:", key.key_size, "bits")Работа с сертификатами X.509
Разберите и изучите сертификаты TLS:
from cryptography import x509
import datetime
with open("cert.pem", "rb") as f:
cert = x509.load_pem_x509_certificate(f.read())
print("Subject:", cert.subject)
print("Issuer:", cert.issuer)
print("Not valid after:", cert.not_valid_after_utc)
print("Serial:", cert.serial_number)Генерация случайных байтов
Всегда используйте os.urandom или secrets для криптографически стойкой случайности:
import os, secrets
# Cryptographically secure 32-byte key
key = os.urandom(32)
print("Random key:", key.hex())
# secrets module: URL-safe token
token = secrets.token_urlsafe(32)
print("URL-safe token:", token)Как избежать ошибок при работе с hazmat
Интерфейс hazmat неслучайно называется «Опасные материалы». Распространённые ошибки: повторное использование одноразовых значений, использование режима ECB, пропуск тегов аутентификации и сравнение MAC с помощью ==. По возможности используйте высокоуровневые интерфейсы.
Проверка знаний
Что даёт шифрование Fernet, чего не даёт один лишь AES-CBC?
Итоги урока
Библиотека cryptography имеет два слоя: безопасный Fernet и гибкий hazmat. Используйте Fernet для симметричного шифрования, а hazmat — для AES-GCM, RSA, ECDSA и работы с сертификатами. Всегда используйте os.urandom для ключей. Избегайте ошибок при работе с hazmat — отдавайте предпочтение аутентифицированным режимам.
Часто задаваемые вопросы
Урок «Обзор библиотеки криптографии Python» бесплатный?
Да — полный текст урока «Обзор библиотеки криптографии Python» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.
Чему я научусь в уроке «Обзор библиотеки криптографии Python»?
Настройте низкоуровневые hazmat-примитивы и высокоуровневые примитивы; изучите структуру библиотеки Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cryptology Academy?
Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Обзор библиотеки криптографии Python»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cryptology Academy?
Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Обзор библиотеки криптографии Python
- Шифрование и расшифрование AES-GCM в Python
- Пары ключей RSA и ECDSA в Python
- Распространённые ошибки в криптографии Python и безопасные шаблоны