0Pricing
Cryptology Academy · Урок

Обзор библиотеки криптографии 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 — локальная установка не требуется.

Все уроки этого курса

  1. Обзор библиотеки криптографии Python
  2. Шифрование и расшифрование AES-GCM в Python
  3. Пары ключей RSA и ECDSA в Python
  4. Распространённые ошибки в криптографии Python и безопасные шаблоны
← Назад к Cryptology Academy