Открыть сервис

PyCrypto

PyCrypto — это набор криптографических модулей для языка программирования Python, предназначенный для реализации различных алгоритмов шифрования, хеширования, генерации случайных чисел и аутентификации. Библиотека предоставляет низкоуровневый интерфейс для работы с симметричными и асимметричными шифрами, цифровыми подписями и хеш-функциями. PyCrypto является одной из старейших и наиболее известных библиотек для криптографии в экосистеме Python, однако в настоящее время её развитие практически остановлено, а сообщество рекомендует использовать более современные аналоги, такие как cryptography или PyCryptodome.

История

Проект PyCrypto был создан в начале 2000-х годов как попытка предоставить Python-разработчикам доступ к стандартным криптографическим алгоритмам без необходимости писать низкоуровневый код на C. Первоначально библиотека разрабатывалась как обёртка над библиотекой OpenSSL, но со временем стала включать собственные реализации алгоритмов.

Основные вехи развития:

Несмотря на устаревание, PyCrypto до сих пор используется в некоторых старых проектах и учебных курсах по криптографии.

Архитектура и основные компоненты

PyCrypto состоит из модулей, каждый из которых реализует определённый класс криптографических операций. Библиотека написана на Python с критическими участками на C для повышения производительности.

Симметричные шифры

PyCrypto поддерживает несколько режимов работы блочных шифров:

Поддерживаемые алгоритмы:

АлгоритмРазмер ключа (бит)Размер блока (бит)Статус
AES128, 192, 256128Актуален
DES5664Устарел
Triple DES112, 16864Устарел
Blowfish32–44864Устарел
CAST540–12864Устарел
ARC28–102464Устарел

Асимметричные шифры

Поддерживаются алгоритмы:

Хеш-функции

PyCrypto включает реализации следующих хеш-функций:

Генерация случайных чисел

Библиотека предоставляет модуль Random, который использует системные источники энтропии (/dev/urandom в Linux, CryptGenRandom в Windows). Для криптографических целей рекомендуется использовать Crypto.Random.get_random_bytes().

Протоколы и утилиты

PyCrypto включает модули для работы с:

Пример использования

Ниже приведён пример шифрования и дешифрования с использованием AES в режиме CBC:

```python from Crypto.Cipher import AES from Crypto.Random import get_random_bytes

key = get_random_bytes(16) # 128-битный ключ iv = get_random_bytes(16) # вектор инициализации

cipher = AES.new(key, AES.MODE_CBC, iv) plaintext = b"Hello, World! Это тестовое сообщение."

Дополнение до кратности 16 байт

padded = plaintext + b" " * (16 - len(plaintext) % 16) ciphertext = cipher.encrypt(padded)

Дешифрование

decipher = AES.new(key, AES.MODE_CBC, iv) decrypted = decipher.decrypt(ciphertext).strip() ```

Критика и ограничения

PyCrypto подвергается критике по нескольким причинам:

  1. Отсутствие активной поддержки — последний релиз вышел в 2013 году, многие уязвимости не исправлены.
  2. Низкая производительность — по сравнению с современными библиотеками (cryptography, PyCryptodome) PyCrypto работает медленнее.
  3. Отсутствие современных алгоритмов — нет поддержки ChaCha20, Poly1305, Ed25519, X25519.
  4. Проблемы с безопасностью — некоторые реализации (например, RSA с PKCS#1 v1.5) уязвимы для атак.
  5. Неудобный API — требует ручного дополнения данных, что часто приводит к ошибкам.

Наследие и влияние

Несмотря на устаревание, PyCrypto сыграл важную роль в популяризации криптографии среди Python-разработчиков. Многие современные библиотеки, такие как PyCryptodome и cryptography, заимствовали идеи и архитектуру PyCrypto. Библиотека до сих пор используется в старых проектах и образовательных курсах как пример реализации криптографических алгоритмов «с нуля».

Альтернативы

Для новых проектов рекомендуется использовать:

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →