- •Требования к функциональным характеристикам
- •Требования к программной документации
- •Стадии и этапы разработки
- •Порядок контроля и приемки
- •2 Технический проект
- •Описание функционала разрабатываемого проекта
- •Разработка программного интерфейса
- •Описание алгоритма решения задачи
- •Описание функций, используемых системой
- •Описание функции «выбор загружаемого файла из системы»
- •Описание функции «сохранение промежуточных результатов»
- •Описание функции «ввод ключа дешифровки»
- •Описание функции «вывод информации о дешифровании»
- •Описание функции «вывод информации о возникающих ошибках»
- •3 Рабочий проект
- •Модули и объекты интерфейса пользователя
- •Описание объектов интерфейса программы
- •Тестирование программной системы
- •Случай использования: дешифровка методом Виженера.
- •Случай использования: проверка кнопки «Сохранить как…».
- •Случай использования: переход с формы навигации на форму «о программе».
- •Случай использования: переход с формы «Дешифровка» по кнопке «Назад» на предыдущую форму.
- •Случай использования: выбор зашифрованного файла.
- •Приложение а
- •Приложение б
Порядок контроля и приемки
Приемка программного изделия осуществляется при сдаче документально оформленных этапов разработки и проведении испытаний на основе установленных тестов. Тесты должны быть предоставлены поставщиком и согласованы с заказчиком.
2 Технический проект
Описание функционала разрабатываемого проекта
Разрабатываемый проект, согласно заданию, должен содержать:
Возможность выбора файла из системы.
Ввод ключа дешифровки.
Дешифрование методами Гронсфельда и Виженера.
Сохранение промежуточных результатов в файлы.
Информацию о дешифровании с выводом на экран в виде текстовых сообщений.
Информацию о возникающих ошибках с выводом на экран в виде сообщений.
Шифры
Шифр Виженера имел репутацию исключительно стойкого к "ручному" взлому. Он достаточно прост для использования в полевых условиях, особенно если применяются шифровальные диски.
В качестве примера попробуем зашифровать с помощью шифра Гронсфельда открытый текст ИНФОРМАЦИОННАЯ БЕЗОПАСНОСТЬ.
Перед началом шифрования открытого текста необходимо выбрать числовой пароль, например это может быть комбинация цифр 2021.
Теперь строго над каждой буквой открытого текста следует записать цифру ключа. Для облегчения работы можно составить таблицу в соответствии с Таблица 1.
Таблица 1 - Пример шифрования
Текст |
И |
Н |
Ф |
О |
Р |
М |
А |
Ц |
И |
О |
Н |
Н |
А |
Я |
… |
Ключ |
2 |
0 |
2 |
1 |
2 |
0 |
2 |
1 |
2 |
0 |
2 |
1 |
2 |
0 |
… |
Значение цифры пароля, находящейся под каждой буквой, означает число позиций, на которое надо сдвинуть букву открытого текста вправо по алфавиту для получения криптограммы. Так, например, в русском алфавите буква И текста будет заменена в криптограмме на букву К, буква Н — на букву Н и так далее.
В результате такого преобразования наш первоначальный открытый текст ИНФОРМАЦИОННАЯ БЕЗОПАСНОСТЬ примет следующий вид: КНЦПТМВЧКОПОВЯГЁЙОСБУНРТФЬ
Расшифровка криптограммы, созданной с помощью шифра Гронсфельда, производится в обратном порядке. После получения шифрованного сообщения необходимо строго над буквами криптограммы записать буквы пароля, если он, конечно, известен получателю.
Необходимо отметить, что при использовании в пароле других цифр потребуется составить другую шифровальную таблицу. Чтобы для нового пароля каждый раз не составлять новую таблицу, можно воспользоваться полной таблицей, как, например, при применении шифра Виженера.
Для того чтобы использовать данный метод Гронсфельда для расшифровки на языке с#, программа должна использовать следующую формулу: decodeText.Append(alphabet[(Array.IndexOf(alphabet, textOld[i]) - keys[i % keys.Length]) % alphabet.Length]); где alphabet– это массив символов алфавита, куда можно внести собственные символы; textOld – это зашифрованный текст; keys – ключ для дешифровки.
В случае, когда массив находится вне границ шифруемого текста, то следует использовать следующую формулу: decodeText.Append(alphabet[alphabet.Length - Math.Abs((Array.IndexOf(alphabet, textOld[i]) - keys[i % keys.Length]) % alphabet.Length.
Для того чтобы использовать данный метод Виженера для расшифровки на языке с#, программа должна использовать следующую формулу: decodeText.Append(alphabet[(Array.IndexOf(alphabet, textOld[i]) + alphabet.Length - Array.IndexOf(alphabet, keys[keys_index])) % alphabet.Length]), так ка Виженер использует в качестве ключа буквы, то keys_index – это индекс этой буквы в алфавите.