id: Гость   вход   регистрация
текущее время 21:00 25/09/2018
Автор темы: Гость, тема открыта 26/11/2013 21:54 Печать
Категории: криптография, инфобезопасность, исходные тексты
http://www.pgpru.com/Форум/UnixLike/РеализацииКриптософтаНаPython
создать
просмотр
ссылки

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


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


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

Рудиментарная поддержка PGP интегрируется в движки, используемые на pgpru.com, причём очередной новый движок будет как раз на Python.
— unknown (27/11/2013 09:32)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664
fileKeccaK in Python, PyOpenSSL.
— Гость (27/11/2013 13:55)   <#>
В Perl для стандартных криптографических библиотек openssl, mcrypt и т.п. (написанных на Си) как правило имеются модули реализующие доступ к ним из Perl. Поэтому в разработке новых библиотек нет особой необходимости. Python тоже скриптовый язык, и скорей всего в нём тоже уже созданы интерфейсы доступа к стандартным С-библиотекам.
— SATtva (27/11/2013 14:01)   профиль/связь   <#>
комментариев: 11531   документов: 1036   редакций: 4054
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)   профиль/связь   <#>
комментариев: 9796   документов: 488   редакций: 5664

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



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



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



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

— Гость (27/11/2013 18:21)   <#>
Вот я и хочу на практике это все понять, потому, что не совсем понимаю логику работы.
— SATtva (27/11/2013 19:02)   профиль/связь   <#>
комментариев: 11531   документов: 1036   редакций: 4054
Как мне сюда прикрепить всякие 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)   профиль/связь   <#>
комментариев: 11531   документов: 1036   редакций: 4054
На счет моего владения Python, я новичок, но Ваш код понял и без комментариев, хотя конечно не до конца и не сразу. Ну т.е. код я читать могу, а сам написать не смогу подобное.

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

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

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

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

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

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

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


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

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

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

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


Самые простые вещи можно понять на пальцах. С более сложными будут проблемы. Например, как реализовать фолдинг в недоязыке, который его в лоб не умеет? Ну, или вот такую вещь? Когда есть понимание связи между абстрактными концепциями, можно не сидеть, тупо выткая в синтаксис и пытаясь переизобрести велосипед, а сразу понимать, как реализовать нужную эквивалентность, потому что она непосредственно следует из математических теорем.
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3