Инструменты криптографии для python 3 - PullRequest
16 голосов
/ 03 января 2011

Я пишу программу на python 3, которая нуждается в функциях шифрования (по крайней мере, aes и rsa). Я нашел PyCrypto , который работает только в версиях 2.x.

Есть ли какой-нибудь хороший инструмент, доступный для Python 3, или мне лучше начать переводить мою программу для совместимости с Python 2 (или любым другим решением)?

Спасибо


Обновление , как упоминалось ниже, PyCrypto теперь доступен на py3k

Ответы [ 9 ]

15 голосов
/ 04 декабря 2011

PyCrypto 2.4.1 и более поздние версии теперь работают на Python 3.x (см. changelog diff ).

5 голосов
/ 03 января 2011

Криптографические библиотеки - это в основном числовые вычисления, и я не знаю, почему версии py3k еще не доступны.

  1. Здесь pyDES доступно для Python 3.
  2. Вот Алгоритм AES реализация в Python 3. Портировано из этой py2k версии
  3. Вот Реализация алгоритма RSA в Python 3. Iперенес его из этой py2k версии .

Пожалуйста, используйте их с осторожностью, так как они являются просто программами разработки, реализованными по тексту алгоритма.(То есть я не уверен в строгости оригинальной версии python2).Кроме того, все они являются чистыми библиотеками Python, они будут работать медленнее, чем все, что написано с использованием C-расширений (и, возможно, именно поэтому версии py3k задерживаются).

5 голосов
/ 03 января 2011

Хотя сам Python 3 готов к прайм-тайм, отсутствие библиотек, поддерживающих его, является помехой.Лучшее, что вы можете сделать, это, конечно, помочь перенести PyCrypto на Python 3, хотя, поскольку в нем много модулей C-расширений, это, вероятно, не совсем тривиально, и я думаю, что это будет работать пару дней.Возможно, текущий сопровождающий заинтересован в портировании или уже на полпути, вы должны связаться с ним и спросить.

Существует модуль rsa, написанный на Python, который выглядит как достаточно чистый и легко переносимый код, но для aesпохоже, что PyCrypto - это модуль для использования.Так что, вероятно, проще заставить ваше программное обеспечение работать под Python 2.

4 голосов
/ 02 февраля 2013

я написал библиотеку-оболочку simple-crypt , которая обеспечивает шифрование и дешифрование в python 3, передавая работу pycrypto.

преимущества использования этого по сравнению с Pycrypto напрямую включают в себя:

  • намного более простой интерфейс:

    data = encrypt(password, text)
    text = decrypt(password, data).decode('utf8')
    
  • расширение ключа для повышения безопасности использования парольных фраз

  • использование hmac для проверки модификации данных

  • версионный заголовок, который должен позволить мне переключить реализацию на ключ Google gar, как только он перейдет на python 3 (так как это должно быть лучше поддержано - я написал это только по очевидной необходимости).

вы можете установить пакет, используя:

easy_install simple_crypt

дополнительная информация доступна на странице github для проекта.

2 голосов
/ 25 марта 2016

Cryptography (documentation) претендует на устранение множества недостатков PyCrypto, M2Crypto и PyOpenSSL.Они не упоминают simple-crypt, но основная цель проекта - предоставить высокоуровневые, безопасные, простые в использовании интерфейсы вместе с набором низкоуровневых интерфейсов (доступных из модуля 'hazmat'), позволяющих более точноДетальный контроль для разработчиков, которые понимают подводные камни.

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

2 голосов
/ 03 декабря 2011

Моя оболочка Python вокруг LibTomCrypt теперь поддерживает Python 3 и имеет AES и RSA.

См .: https://github.com/mikeboers/PyTomCrypt#readme

2 голосов
/ 09 августа 2011

Вот библиотека Python3 для криптографии исследование от Джона Хопкинса. Он поддерживает операции с эллиптической кривой и криптографию на основе сопряжения.

2 голосов
/ 04 января 2011

Мне неизвестна какая-либо разумная криптографическая библиотека для python (независимо от версии).Все, что я знаю (включая pycrypto), это просто игрушка.Если вы хотите реализовать серьезное приложение, вам следует поискать оболочку для реальной библиотеки, такой как m2crypto.Сам Pycrypto действительно следует многим стандартам.Особенно RSA нуждается в хорошей схеме заполнения, чтобы быть защищенной.Поскольку pycrypto, по крайней мере, в настоящее время не использует заполнение, это делает его реализацию RSA довольно небезопасной и несовместимой с другими библиотеками шифрования.

Ответ на вопрос Мартинса: Очевидно, этот вопрос открыт для многих мнений.Одним из предложений будет использование Java вместо Python.Java имеет четко определенный криптографический интерфейс, и существуют различные провайдеры, которые реализуют этот интерфейс.Это имеет довольно большое преимущество, заключающееся в том, что можно реализовать решение независимо от поставщика, чтобы можно было легко переключаться между различными поставщиками.Мне лично нравится openssl, но я знаю, что его довольно сложно использовать.

1 голос
/ 08 сентября 2011

pycrypto имеет ветку Py3k (в https://github.com/dlitz/pycrypto/tree/py3k)

...