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