Реализации криптософта на Python
Всем привет. Подкиньте пожалуйста несколько примеров достойной реализации криптографического софта на Python. Интересует не только GUI, а сама реализация криптографических алгоритмов, можно и стеганографию. Поясню, я изучаю Python и хочу сразу посмотреть на готовые серьезные проекты, чтобы на практике отточить полученые знания. Других ЯП не знаю, хочу остановиться на Python. Ну и буду благодарен за любые советы по повышению знаний и ускорению обучения.
Спасибо.
Ссылки
[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/Комбинатор_неподвижной_точки
Рудиментарная поддержка PGP интегрируется в движки, используемые на pgpru.com, причём очередной новый движок будет как раз на Python.
KeccaK in Python[link1], PyOpenSSL[link2].
В Perl для стандартных криптографических библиотек openssl, mcrypt и т.п. (написанных на Си) как правило имеются модули реализующие доступ к ним из Perl. Поэтому в разработке новых библиотек нет особой необходимости. Python тоже скриптовый язык, и скорей всего в нём тоже уже созданы интерфейсы доступа к стандартным С-библиотекам.
PyOpenSSL одна из них. Множество стандартных примитивов реализованы в PyCrypto. Если нужно что-то более экзотическое (ECC на Curve25519, к примеру), всё это ищется на https://pypi.python.org.
Я не очень пока понимаю – как подключать, точнее как работать с криптографическими библиотеками, поэтому и хочу посмотреть живой пример достойной реализации. К примеру:
Откуда взялась переменная PADDING и почему на нее размер блоков умножается, где именно документация по поводу всех этих лямбд:
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING)
Как мне сюда прикрепить всякие f.open или хотябы полноценную работу из консоли с указанием файлов?
Ну и много других вопросов. Я наверное логику не понимаю, да?
И еще – здесь без математики сильно печально будет да?
А это ковыряйте саму библиотеку.
А это уж как реализовано[link3], опять же внутри этой либы.
А она даже и не нужна, вам только свои данные подставить в готовый синтаксис, или опять же смотрите в исходную либу.
Ну это уже нужен просто какой-нибудь мануал по стандартному синтаксису и функциям Python и ваша фантазия.
Вот я и хочу на практике это все понять, потому, что не совсем понимаю логику работы.
Вы уверены, что достаточно владеете питоном? Пройдитесь, например, по Dive into Python, прежде чем лезть в криптографию.
Если очень интересна конкретика, вот низкоуровневый криптографический модуль из нового движка сайта, ковыряйте, он достаточно подробно документирован (реализован AES-CTR, RSA и ряд вспомогательных примитивов). Сходу он отдельно работать не будет из-за внешних зависимостей (paw и exc), отвязку оставляю упражнением для читателя.
На счет моего владения Python, я новичок, но Ваш код понял и без комментариев, хотя конечно не до конца и не сразу. Ну т.е. код я читать могу, а сам написать не смогу подобное. Хотя у Вас там так все документировано, что можно просто в конце файла продублировать твои функции с префиксом doc и вызывать их как справку. А где код движка посмотреть можно? За Drive into Python отдельное спасибо, ознакомлюсь. Дадите пару советов по скорейшему овладеванию программированием?
В 2014-ом году.
Учиться, учиться и ещё раз учиться © Ленин.
Это самая простая часть движка, просто набор функций.
Он не завершён и не опубликован, надеюсь закончить к весне.
<Jimmy Wales mode>
Give me your money[link4], программисты тоже хотят есть.
</Jimmy Wales mode>
Начните отсюда[link5], далее перейдите сюда[link6], потом к Dive into Python[link7], а после начните писать что-то своё, желательно с использованием хороших внешних библиотек, и изучая их документацию, интерфейсы, паттерны и примеры научитесь ещё более лучше. Короче, слушайте дедушку Ленина.
Вбиваем этот ключ в Гуглокартинки и... учимся, учимся и еще раз учимся;)
В затянутом TBB (без кук и скриптов) это 2-3 страничка:)
Сцука, зачем ты это сказал? Всё, пепец теперь работе...
Конкретное в питоне — здесь[link8], но это не питоноспецифичная вещь, это концепт[link9], на котором стоит ФП[link10]. С его освоения начинается убийство в себе быдлокодера. В частности, лямбды активно используются для определения анонимных функций[link11], через которые очень удобно записывать такие сильно упрощающие жизнь вещи, как замыкания[link12] и карринг[link13].
По ссылке выше на ФП сказано
В любом случае, IMHO, оптимальней сначала попытаться понять математический смысл действий, а уже только потом реализацию этих действий в конкретных языках.
Самые простые вещи можно понять на пальцах. С более сложными[link14] будут проблемы. Например, как реализовать фолдинг[link15] в недоязыке[link16], который его в лоб не умеет? Ну, или вот такую вещь[link17]? Когда есть понимание связи между абстрактными концепциями, можно не сидеть, тупо выткая в синтаксис и пытаясь переизобрести велосипед, а сразу понимать, как реализовать нужную эквивалентность, потому что она непосредственно следует из математических теорем.