ENIGMA 3000
Перед тем как рассказывать о ENIGMA3000, надо рассказать о ENIGMA2000.
История ENIGMA2000
ENIGMA2000 была моим первым по настоящему серьёзным проектом. Работу над неё я начал случайно. Сначала мне пришла идея заменить в вводном тексте одни буквы на другие. После успешного выполнения данной "задачи", я вспомнил недавно просмотренный мною ролик Numberphile о Enigma и решил сделать примитивную её интерпритацию.
Первым делом я начал создавать базу данных(python словарь, где один символ равняется другому символу "a=c") , причём создавать я её начал вручную. Создав 2 позиции "ключа"(так потом я буду называть базу данных), я понял, что вручную создавать такое - не комельфо, поэтому я создал "генератор ключей".
Принцип его был прост: из общей базы символов, которые будут использоваться в "ключе", выбираются 2 символа(допустим a и b), после чего в первую позицию ключа добавляется два значения: a=b и b=a (из-за такой конструкции символов, использующихся в ключе должно быть обязательно чётное число), так повторялось со всеми остальными символами, потом создавалась новая позиция "ключа" и цикл повторялся необходимое(заранее указанное) количество раз.
Шифрующая программа работала так: ты вводил текст, который хотел зашифровать, вводил начальную позицию "ключа", вводил путь к файлу "ключа" и получал зашифрованный текст. Для дешифровки нужно было провернуть то же самое, только ввести зашифрованный текст.
В дальнейшем я сделал возможность создавать файлы "ключей" для более удобного использования. А потом сделал версии обоих программ с визуальным интерфейсом(до этого программы работали в терминале).
Enigma3000
Недавно мне пришла идея, имея больший опыт в кодинге, написать заново ENIGMA2000(так как оригинальная программа страдала "спагетти кодом") и добавить туда пару изменений.
В процессе написания проекта, мне пришла идея - вместо того, чтобы вводить только начальную позицию ключа, вводить последовательность позиций ключа, которая бы повторялась. Реализовав данную идею, мне пришла более интресная - ассоциировать с каждой позицией ключа(номером позиции) символ. В итоге будет получаться шифрование с помощью кодовой фразы. Офигенно!
Пока я реализовывал эту затею у меня возникли две проблемы: Проблема с SSD(её я описывал в этом посте) и проблема с Pickle.
Pickle - это модуль в python, который предустановлен по умолчанию и позволяет кодирывать переменные в файл так, чтобы их потом мог нормально прочитать python. У меня проблема заключалась в том, что после кодирования информации в файл, файл оставался пустым. Странности добавляло то, что никогда до этого у меня такой проблемы не было. Но потом я смог её решить.
В итоге у меня получилось 4 программы: "Шифровальная машина","Генератор "ключей"", "Генератор "базы данных"" и "Генератор "ключей для кодовых фраз"". "Генератор "базы данных"" нужен для создания файлов со всеми, использующимися в работе комплекса программ, символами. "Генератор "ключей для кодовых фраз"" нужен для создания ключа, где символ равняется числу(например a=42).
Итоги
Комплекс программ ENIGMA300 готов, но без визуального интерфейса. В данный момент я, как раз, работаю на UI. Весь коплекс программ доступен на GitHub здесь.