Ответ 1
PyCrypto 2.4.1 и более поздние версии теперь работают над Python 3.x(см. изменения изменений).
Я пишу программу в python 3, которая нуждается в функциях шифрования (по крайней мере, aes и rsa). Я нашел PyCrypto, который, кажется, работает только в версиях 2.x.
Есть ли какой-либо хороший инструмент для python 3 или я должен начать переводить свою программу на совместимость с python 2 (или любым другим решением)?
Спасибо
Обновить, как указано ниже, PyCrypto теперь доступен на py3k
PyCrypto 2.4.1 и более поздние версии теперь работают над Python 3.x(см. изменения изменений).
Crytographic Libraries - это в основном числовые вычисления, и я не знаю, почему версии py3k еще не доступны.
Пожалуйста, используйте их с осторожностью, поскольку они только программы развития, реализованные в соответствии с текстом алгоритма. (То есть, я не уверен в точности в исходной версии python2). Кроме того, все они являются чистыми библиотеками python, они будут медленнее, чем все, что написано с использованием C-расширений (и, возможно, это причина, почему версии py3k задерживаются).
Хотя сам Python 3 готов к прайм-тайму, недостаток библиотек, которые его поддерживают, является помехой. Лучшее, что вы можете сделать, это, конечно, помочь порту PyCrypto на Python 3, хотя, поскольку в нем много модулей C-расширения, которые, вероятно, не совсем тривиальны, и я буду думать о двух днях работы. Может быть, нынешний сопровождающий заинтересован в портировании или уже на полпути, вам следует связаться с ним и спросить.
Существует модуль rsa, написанный на Python, который имеет довольно чистый и легко переносимый код, но для aes кажется, что PyCrypto - это модуль для использования. Поэтому, вероятно, проще сделать ваше программное обеспечение под управлением Python 2.
Я написал библиотеку обертки simple-crypt, которая обеспечивает шифрование и дешифрование в python 3, делегируя работу на pycrypto.
преимущества использования этого над pycrypto напрямую включают:
гораздо более простой интерфейс:
data = encrypt(password, text)
text = decrypt(password, data).decode('utf8')
расширение ключа для более безопасного использования кодовых фраз
использование hmac для проверки на изменение данных
версированный заголовок, который должен позволить мне переключить реализацию на google keyczar, когда она переместится на python 3 (так как это должно быть лучше поддерживается - я только написал это из очевидной необходимости).
вы можете установить пакет, используя:
easy_install simple_crypt
более подробная информация доступна на странице github для проекта.
Я не знаю никакой разумной библиотеки криптографии для python (независимо от версии). Все, что я знаю (включая pycrypto), это просто игрушка. Если вы хотите реализовать серьезное приложение, вам следует искать оболочку в реальной библиотеке, например m2crypto. Сам Pycrypto придерживается многих стандартов. В частности, RSA нуждается в хорошей схеме прокладки, чтобы быть в безопасности. Поскольку pycrypto по крайней мере в настоящее время не используется это добавление, что делает его реализацию RSA весьма небезопасной и несовместимой с другими криптовыми библиотеками.
Отвечайте на вопрос Мартинса: Очевидно, этот вопрос открыт для многих мнений. Одно из предложений заключалось бы в использовании Java вместо python. Java имеет четко определенный криптографический интерфейс, и существуют различные поставщики, реализующие интерфейс. Это имеет довольно большое преимущество, что можно реализовать решение, не зависящее от поставщика, так что можно легко переключаться между разными провайдерами. Мне лично нравится openssl, но я знаю, что его довольно сложно использовать.
Вот библиотека Python3 для криптографии research от Джонс Хопкинс. Он поддерживает операции эллиптической кривой и криптования на основе сопряжения.
Оболочка My Python вокруг LibTomCrypt теперь поддерживает Python 3, и она имеет как AES, так и RSA.
pycrypto имеет ветвь Py3k (в https://github.com/dlitz/pycrypto/tree/py3k)
Cryptography
(documentation
) для устранения нескольких недостатков PyCrypto
, M2Crypto
и PyOpenSSL
. Они не упоминают simple-crypt
, но основной целью проекта является предоставление высокоуровневых, безопасных и простых в использовании интерфейсов, а также набор интерфейсов более низкого уровня (доступный из модуля "hazmat" ) для разработчиков, которые понимают подводные камни.
Не используя другие библиотеки, я не могу прокомментировать, является ли криптография лучше, чем альтернативы, но она, безусловно, удовлетворила мои потребности до сих пор.