Реализация и криптоанализ шифра простой перестановки

Всем привет! Продолжается погружение в увлекательный и местами запутанный мир криптографии. Шифр простой перестановки самый легкий из перестановочных, но даже его взлом занял у меня в два раза больше времени и сил, чем шифр Цезаря. Пришлось попотеть с выбором алгоритма криптоанализа. Сначала я пробовал частотный анализ биграмм, но для этого метода нужен очень большой литературный текст, иначе частоты никогда не совпадут с эталонными. Поэтому окончательный выбор пал на метод запрещенных биграмм. Я расскажу о нем подробнее, но сначала пара слов о самом шифре, поехали!

Прежде чем продолжить чтение, обратите внимание на реализации других шифров

Шифр простой перестановки

Определение перестановки(подстановки, расстановки) приводить не буду, о каком шифре может идти речь, если не знать базовых определений?

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

Итак, суть. Дан ключ — перестановка длины N, не большей, чем длина открытого текста. Во время шифрования текст делится на блоки длины N и в каждом блоке символы меняются местами в соответствии с перестановкой. Расшифровка выполняется аналогично.

читать далее «Реализация и криптоанализ шифра простой перестановки»

Создание каталога электронной библиотеки с помощью Python

Доброго денечка или вечерочка всем, кто забрел на эту страничку. Знаете, я недавно исполнил свою давнюю мечту. Дело в том, что с тех пор, как количество папок в моей электронной библиотеке перевалило за десяточку, я начал задумываться о структурированном каталоге, в котором будут красиво перечислены все собранные мной сочинения. Чтобы можно было одним легким взглядом окинуть простор прочитанных или заброшенных книг.

Впервые я задумался об этом в десятом классе. Уже тогда я точно знал, что буду поступать на IT, поэтому логичная мысль пришла в голову: «давай, ты же программист!». На тот момент я умел писать Hello world в Си и решать некоторые задачки из ЕГЭ. Воодушевился и начал гуглить! Естественно, знаний совершенно недостаточно, ничего у меня не получилось, я бросил эту затею. В свое оправдание могу сказать, что работа с каталогами в Си совсем нетривиальна, особенно для десятиклассника, у которого в школе не было информатики.

И вот буквально пару дней назад я вновь заглянул в папочку «Library», дабы закачать что нибудь свеженькое на электронную книгу. И меня поразил гром среди ясного неба: «Я же умею питон! Наверняка в нем можно за пару строк описать любую директорию». Оказалось, что так и есть. Пять минут в поиске и я выбрал кандидата в мои помощники. Итак, встречайте!

Модуль os в Python

читать далее «Создание каталога электронной библиотеки с помощью Python»

Использование sudo без ввода пароля в Ubuntu

На днях задумался о замечательной программе sudo. Согласитесь, трудно представить свою жизнь без нее? Когда мне первый раз дали потрогать Linux Dedian в университетской лаборатории, я заходил с помощью команды su под администратора, вводил пароль и вытворял все, что душе угодно. Конечно же, в 85% случаев я не выходил из root-пользователя и в следующий раз удивлялся обилию заблокированных файлов в домашней директории. Но еще больше удивлялись студенты, которые работали за этой машиной после меня.

Тогда я думал: «Глупый линукс, кому нужны все эти права! Только лишние телодвижения». Сейчас мой взгляд на эту ОС изменился. Я поддался очарованию движения Open Source и возможности настроить в системе вообще все!

Но хватит вступлений. Вопрос, о котором я задумался, звучит так: «Можно ли использовать sudo без ввода пароля?». Оказалось, что да, но зачем?

читать далее «Использование sudo без ввода пароля в Ubuntu»

Создание формы обратной связи на PHP

Всем привет! Произошла небольшая заминка с разметкой Schema.org, но все разрешилось успешно. В скором времени подробно опишу ее внедрение. Внесу свою лепту в эту загадочную тему. Загадочную потому, что совсем не просто с наскока взять и внедрить на свой сайт микроразметку. А уж тем более выпилить старую. Но об этом позже, а сегодня расскажу о том, как создавал форму обратной связи на PHP.

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

Прогуглил, нашел функцию mail, обрадовался, что все велосипеды уже давно написаны. Значит можно просто собрать форму и отправить ее на электронный адрес, отлично.

Для начала глянем на саму функцию отправки письма, я уверен, что она еще много раз мне пригодится. Будет полезно сохранить ее синтаксис и описание.

Функция mail в PHP

читать далее «Создание формы обратной связи на PHP»

Реализация парсера математических выражений на С++

Доброго времени суток, дорогие гости! Сегодня мы будем программировать одну очень интересную штуку. Алгоритм распознавания и вычисления математических выражений, проще говоря, парсер. Он очень активно использует постфиксную запись выражения, о ней мы тоже поговорим, и научимся программно ее получать.

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

Итак, кто же такой парсер и чем он занимается? Давайте разбираться.

Задача

Наш парсер математических выражений должен уметь распознавать и вычислять такие операции:
— сложение, вычитание, умножение, деление;
— возведение в степень, остаток от деления(%);
— факториал;
— логическое И, логическое ИЛИ, логическое отрицание;
— синус, косинус, тангенс, арксинус, арккосинус, арктангенс;

читать далее «Реализация парсера математических выражений на С++»