Table of Contents
ТЗ на работу:
Минимальный результат:
- Создайте программу, в которую можно передать файл с определенной информацией. Входящий и исходящий формат файла .txt. Известно, что информация, находящаяся в файле – зашифрована одним из методов простой замены с ключом. Знаки препинания, и прочие элементы не относящиеся к алфавиту сообщения не изменяются. В сообщении используется десятичная система счисления и русский алфавит.
- Программа должна осуществлять дешифровку информации, находящейся в файле и вывод её на экран пользователя.
- Программа должна предоставлять возможность сохранить дешифрованную информацию в отдельный файл, с указанием его названия и директории для сохранения.
- Программа должна обладать интерфейсом для взаимодействия с пользователем, а также меню для управления функциональными возможностями программы.
- Программа должна являться WPF\UWP приложением.
Ожидаемый результат: В дополнение к минимальному результату:
- Программа должна предоставлять возможность для зашифровывания информации, введенной пользователем с клавиатуры, а также возможность указать ключ.
- Результат шифрования должен быть сохранен в отдельный файл, с указанием его названия и директории для сохранения.
- Основной функционал должен быть покрыт автоматическими Unit тестами, с использованием стандартных возможностей Unit Testing Framework.
Продвинутый результат: В дополнение к ожидаемому результату:
- Программа должна предоставлять возможность для считывания незашифрованной информации из файла, формат файла .docx.
- Предоставлять возможность для зашифровывания информации в нем, с возможностью указания ключа.
- Результат шифрования должен быть сохранен в отдельный файл, с указанием его названия и директории для сохранения, формат файла .docx.
- Программа должна быть реализована в виде web-приложения с использованием стека технологий ASP.NET.
Для данного решения были использованы возможности ASP.NET Core MVC:
Возможности программы:
- Шифрование файлов с использованием шифра Виженера.
- Дешифрование файлов с использованием шифра Виженера.
- Задание ключа (используется русский алфавит).
- Возможность просмотра превью результата (получившегося файла) перед его сохранением.
- Возможность просмотра результата без сохранения файлов (в том числе и временных).
- Поддержка двух форматов файлов: .txt, .docx.
- Сохранение формата текста при шифровании (сохраняются абзацы('\n') и большие буквы).
- Шифровка/дешифровка с использованием выбранной кодировки (Доступны UTF-8, ANSI, ASCII).
- Код написан таким образом, чтобы можно было легко масштабировать его до любого количества кодировок.
- Вся программная часть покрыта юнит тестами xUnit.
- Добавлена возможность "Chat" для ввода текста прямо в приложении.
- Так же как файл не требовался для написания такого текста, не обязательно его и сохранять, однако, такая возможность тоже имеется.
В проекте были использованы пакеты:
Решение находится в ..\EncryptApp\EncryptApp.sln
Все стили, примененные к страницам находятся в ..\wwwroot\css\StyleSheet.css.
В целях улучшения производительности было заменено:
- Вместо обычной конкатенации строк используется StringBuilder
- Вместо всех возможных циклов foreach - обычные for
- Вместо List для промежуточного хранения текста используется char[]
- А также char[] используется и для шифрования в том числе. По заданию, текст в ходе работы программы не меняется пользователем, а значит расширение не планируется - использование List'а не оправдано.
- Сам метод шифрования в классе EncryptingMachine вынесен в отдельный private метод для того, чтобы можно было добавить (ex дополнить) любой другой метод/вид шифрования, не меняя логику использования класса.
Незамысловатое user friendly оформление, вместо pop-up окон с формами и ошибками использовалось @Html.ValidationSummary и валидация модели (то есть при создании класса используется всегда правильный инвариант). В случае ошибки, пользователю будет возвращена его "неудачная" попытка и сообщение о причине ошибки над полями для ввода. Не все поля являются обязательными для заполнения: если у полей предусмотренно дефолтное значение, оставить их пустыми не будет являться ошибкой.





