Реализации криптософта на Python


Всем привет. Подкиньте пожалуйста несколько примеров достойной реализации криптографического софта на Python. Интересует не только GUI, а сама реализация криптографических алгоритмов, можно и стеганографию. Поясню, я изучаю Python и хочу сразу посмотреть на готовые серьезные проекты, чтобы на практике отточить полученые знания. Других ЯП не знаю, хочу остановиться на Python. Ну и буду благодарен за любые советы по повышению знаний и ускорению обучения.
Спасибо.

Комментарии
Гость (27/11/2013 02:53)   
несколько примеров достойной реализации криптографического софта на Python

Рудиментарная поддержка PGP интегрируется в движки, используемые на pgpru.com, причём очередной новый движок будет как раз на Python.
— unknown (27/11/2013 09:32)   
KeccaK in Python[link1], PyOpenSSL[link2].
Гость (27/11/2013 13:55)   
В Perl для стандартных криптографических библиотек openssl, mcrypt и т.п. (написанных на Си) как правило имеются модули реализующие доступ к ним из Perl. Поэтому в разработке новых библиотек нет особой необходимости. Python тоже скриптовый язык, и скорей всего в нём тоже уже созданы интерфейсы доступа к стандартным С-библиотекам.
— SATtva (27/11/2013 14:01)   
PyOpenSSL одна из них. Множество стандартных примитивов реализованы в PyCrypto. Если нужно что-то более экзотическое (ECC на Curve25519, к примеру), всё это ищется на https://pypi.python.org.
Гость (27/11/2013 17:40)   
Я не очень пока понимаю – как подключать, точнее как работать с криптографическими библиотеками, поэтому и хочу посмотреть живой пример достойной реализации. К примеру:


Откуда взялась переменная PADDING и почему на нее размер блоков умножается, где именно документация по поводу всех этих лямбд:
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING)
Как мне сюда прикрепить всякие f.open или хотябы полноценную работу из консоли с указанием файлов?
Ну и много других вопросов. Я наверное логику не понимаю, да?
И еще – здесь без математики сильно печально будет да?
— unknown (27/11/2013 17:58, исправлен 27/11/2013 17:58)   

А это ковыряйте саму библиотеку.



А это уж как реализовано[link3], опять же внутри этой либы.



А она даже и не нужна, вам только свои данные подставить в готовый синтаксис, или опять же смотрите в исходную либу.



Ну это уже нужен просто какой-нибудь мануал по стандартному синтаксису и функциям Python и ваша фантазия.

Гость (27/11/2013 18:21)   
Вот я и хочу на практике это все понять, потому, что не совсем понимаю логику работы.
— SATtva (27/11/2013 19:02)   
Как мне сюда прикрепить всякие f.open или хотябы полноценную работу из консоли с указанием файлов?

Вы уверены, что достаточно владеете питоном? Пройдитесь, например, по Dive into Python, прежде чем лезть в криптографию.

Если очень интересна конкретика, вот низкоуровневый криптографический модуль из нового движка сайта, ковыряйте, он достаточно подробно документирован (реализован AES-CTR, RSA и ряд вспомогательных примитивов). Сходу он отдельно работать не будет из-за внешних зависимостей (paw и exc), отвязку оставляю упражнением для читателя.

Гость (27/11/2013 22:00)   
На счет моего владения Python, я новичок, но Ваш код понял и без комментариев, хотя конечно не до конца и не сразу. Ну т.е. код я читать могу, а сам написать не смогу подобное. Хотя у Вас там так все документировано, что можно просто в конце файла продублировать твои функции с префиксом doc и вызывать их как справку. А где код движка посмотреть можно? За Drive into Python отдельное спасибо, ознакомлюсь. Дадите пару советов по скорейшему овладеванию программированием?
Гость (28/11/2013 00:05)   

В 2014-ом году.


Учиться, учиться и ещё раз учиться © Ленин.
— SATtva (28/11/2013 14:15)   
На счет моего владения Python, я новичок, но Ваш код понял и без комментариев, хотя конечно не до конца и не сразу. Ну т.е. код я читать могу, а сам написать не смогу подобное.

Это самая простая часть движка, просто набор функций.

А где код движка посмотреть можно?

Он не завершён и не опубликован, надеюсь закончить к весне.

<Jimmy Wales mode>
Give me your money[link4], программисты тоже хотят есть.
</Jimmy Wales mode>

Дадите пару советов по скорейшему овладеванию программированием?

Начните отсюда[link5], далее перейдите сюда[link6], потом к Dive into Python[link7], а после начните писать что-то своё, желательно с использованием хороших внешних библиотек, и изучая их документацию, интерфейсы, паттерны и примеры научитесь ещё более лучше. Короче, слушайте дедушку Ленина.
Гость (29/11/2013 20:41)   
Учиться, учиться и ещё раз учиться
Вбиваем этот ключ в Гуглокартинки и... учимся, учимся и еще раз учимся;)
В затянутом TBB (без кук и скриптов) это 2-3 страничка:)
Гость (30/11/2013 00:16)   
Сцука, зачем ты это сказал? Всё, пепец теперь работе...
Гость (08/12/2013 04:20)   

Конкретное в питоне — здесь[link8], но это не питоноспецифичная вещь, это концепт[link9], на котором стоит ФП[link10]. С его освоения начинается убийство в себе быдлокодера. В частности, лямбды активно используются для определения анонимных функций[link11], через которые очень удобно записывать такие сильно упрощающие жизнь вещи, как замыкания[link12] и карринг[link13].


По ссылке выше на ФП сказано

Некоторые концепции и парадигмы специфичны для функционального программирования и в основном чужды императивному программированию (включая объектно-ориентированное программирование). Тем не менее, языки программирования обычно представляют собой гибрид нескольких парадигм программирования, поэтому «большей частью императивные» языки программирования могут использовать какие-либо из этих концепций.

Принципиально нет препятствий для написания программ в функциональном стиле на языках, которые традиционно не считаются функциональными, точно так же, как программы в объектно-ориентированном стиле можно писать на структурных языках. Некоторые императивные языки поддерживают типичные для функциональных языков конструкции, такие как функции высшего порядка и списковые включения (list comprehensions), что облегчает использование функционального стиля в этих языках. Примером может быть функциональное программирование на языке Python. Другим примером является язык Ruby, который имеет возможность создания как lambda-объектов, так и возможность организации анонимных функций высшего порядка через блок с помощью конструкции yield.

В любом случае, IMHO, оптимальней сначала попытаться понять математический смысл действий, а уже только потом реализацию этих действий в конкретных языках.


Самые простые вещи можно понять на пальцах. С более сложными[link14] будут проблемы. Например, как реализовать фолдинг[link15] в недоязыке[link16], который его в лоб не умеет? Ну, или вот такую вещь[link17]? Когда есть понимание связи между абстрактными концепциями, можно не сидеть, тупо выткая в синтаксис и пытаясь переизобрести велосипед, а сразу понимать, как реализовать нужную эквивалентность, потому что она непосредственно следует из математических теорем.

Ссылки
[link1] http://keccak.noekeon.org/KeccakInPython-3.0.zip

[link2] https://launchpad.net/pyopenssl

[link3] https://en.wikipedia.org/wiki/Padding_(cryptography)

[link4] http://www.pgpru.com/proekt/podderzhka#h14531-4

[link5] http://docs.python.org/3/tutorial/

[link6] http://docs.python.org/3/reference/

[link7] http://www.diveintopython.net/

[link8] http://docs.python.org/3/reference/expressions.html#lambda

[link9] https://ru.wikipedia.org/wiki/Лямбда-исчисление

[link10] https://ru.wikipedia.org/wiki/Функциональное_программирование

[link11] https://ru.wikipedia.org/wiki/Анонимная_функция

[link12] https://ru.wikipedia.org/wiki/Замыкание_(программирование)

[link13] https://ru.wikipedia.org/wiki/Каррирование

[link14] https://webcache.googleusercontent.com/search?q=cache:msYUieJ598UJ:http://apageofinsanity.wordpress.com/category/programming/matlab/page/2/+matlab%20fold%20Y-combinator&gbv=1&hl=en&as_q=&nfpr=&spell=1&ct=clnk

[link15] https://ru.wikipedia.org/wiki/Свёртка_списка

[link16] http://lambda.jstolarek.com/2012/09/y-combinator-in-matlab/

[link17] https://ru.wikipedia.org/wiki/Комбинатор_неподвижной_точки