Ответ 1
Это зависит.
Некоторые части PyCrypto действительно хороши. Например, API для Crypto.Random(представленный в PyCrypto 2.1) был разработан, чтобы быть довольно надежным, и основной алгоритм, который он использует (Fortuna), также был разработан, чтобы быть довольно надежным.
Другие части - это просто реализация низкоуровневых крипто-примитивов, поэтому он работает, но вы должны знать, что вы делаете, чтобы правильно их использовать. Например, Crypto.PublicKey.RSA не реализует полный стандарт RSA PKCS # 1 (о чем большинство людей думает, когда говорят о "RSA" ). Он реализует только базовый примитив RSA (m ^ e mod n и c ^ d mod n), и вы все равно должны предоставить свою собственную реализацию PKCS # 1.
Лучший способ убедиться, что PyCrypto правильно шифрует ваши данные (без чтения исходного кода, который я рекомендую всем делать) заключается в использовании стандартного протокола и/или формата сообщения и проверке того, что ваш код взаимодействует с другими реализациями, Если вы составляете свой собственный формат сообщений (который вы, вероятно, не должны делать в любом случае), то вам нужно быть очень осторожным, чтобы PyCrypto фактически делал все, что вы думаете, что он делает.
Отказ от ответственности: я - текущий поддерживающий PyCrypto, поэтому мои мнения не следует рассматривать как независимый обзор.
Обновление: PyCrypto v2.5 и более поздние версии теперь включают в себя правильные RSA PKCS # 1 шифрование и подписи. Подробнее см. Документацию API для Crypto.Cipher.PKCS1_OAEP и Crypto.Signature.PKCS1_PSS.