Главная страница
Навигация по странице:

  • Шифрование при помощи шифра Виженера

  • Разработка программы для реализации поставленной задачи 2.1

  • 2

  • 4

  • 6 Криптография (http://www.citforum.ru/internet/securities/crypto.shtml) 7

  • 8

  • Разработка программы шифрования на основе шифра Виженера. Шифрование при помощи шифра Виженера 1 История создания шифра 2 Процесс шифрования (алгоритм)


    Скачать 2.63 Mb.
    НазваниеШифрование при помощи шифра Виженера 1 История создания шифра 2 Процесс шифрования (алгоритм)
    АнкорРазработка программы шифрования на основе шифра Виженера
    Дата26.03.2023
    Размер2.63 Mb.
    Формат файлаdoc
    Имя файлаРазработка программы шифрования на основе шифра Виженера.doc
    ТипГлава
    #1016654

    Содержание


    Глава 1. Шифрование при помощи шифра Виженера

    1.1 История создания шифра

    1.2 Процесс шифрования (алгоритм)

    Глава 2. Разработка программы для реализации поставленной задачи

    .1 Результат работы программы с точки зрения пользователя

    2.2 Разработка приложения

    Глава 3. Тестирование программы

    .1 Тест №1

    3.2 Тест №2

    3.3 Тест №3

    3.4 Тест №4

    Заключение

    Библиографический список

    Приложение №1. Таблица. Пример квадрата Виженера

    Приложение № 2. Квадрат Виженера в программе

    Приложение № 3. Блок - схема программы

    Приложение № 4. Исходный код программы

    Приложение № 5. Результат тестирования № 3 - Шаг 1

    Приложение № 6. Результат тестирования № 3 - Шаг 2

    Приложение № 7. Результат тестирования № 3 - Шаг 3

    Приложение № 8. Результат тестирования № 3 - Шаг 4

    Приложение № 9. Результат тестирования № 3 - Шаг 5

    Приложение № 10. Результат тестирования № 4 - Шаг 1

    Приложение № 11. Результат тестирования № 4 - Шаг 2

    Приложение № 12. Результат тестирования № 4 - Шаг 3

    Приложение № 13. Результат тестирования № 4 - Шаг 4

    Приложение № 14. Результат тестирования № 4 - Шаг 5

    Приложение № 15. Результат тестирования № 4 - Шаг 6

    Приложение № 16. Результат тестирования № 4 - Шаг 7

    Приложение № 17. Результат тестирования № 4 - Шаг 8

    Приложение № 18. Результат тестирования № 4 - Шаг 9

    Приложение № 19. Результат тестирования № 4 - Шаг 10

    Приложение № 20. Результат тестирования № 4 - Шаг 11

    Приложение № 21. Адаптация программы под латинский язык

    Приложение № 22. Тесты программы (адаптации) под латинский язык

    Приложение № 23. Диаграмма 1

    Введение


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

    Цель:

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

    Задачи:

    . Изучить метод шифрования при помощи шифра Виженера.

    . Разработать алгоритм, связывающий идею шифрования и особенности языка программирования.

    . Разработать консольное приложение, которое преобразует текст на русском языке в зашифрованный текст.

    . Подготовить набор тестов и протестировать полученное приложение.

    Под объектом исследования понимается шифрование и кодирование данных. Предмет исследования представляет собой метод шифрования при помощи шифра Виженера.

    Основная часть

    1глава основной части



    Шифрование при помощи шифра Виженера

    1.1 История создания шифра
    Первое точное документированное описание многоалфавитного шифра было сформулировано Леоном Батиста Альберти в 1467 году, для переключения между алфавитами использовался металлический шифровальный диск. Система Альберти переключает алфавиты после нескольких зашифрованных слов. Позднее, в 1518 году, Иоганн Трисемус в своей работе "Полиграфия" изобрел tabula recta - центральный компонент шифра Виженера (таблица Виженера) [1].

    То, что сейчас известно под шифром Виженера, впервые описал Джованни Батиста Беллазо в своей книге La cifra del. Sig. Giovan Battista Bellasо. Он использовал идею tabula recta Трисемуса, но добавил ключ для переключения алфавитов шифра через каждую букву.

    Блез Виженер представил своё описание простого, но стойкого шифра перед комиссией Генриха III во Франции в 1586 году, и позднее изобретение шифра было присвоено именно ему. Давид Кан в своей книге "Взломщики кодов" отозвался об этом осуждающе, написав, что история "проигнорировала важный факт и назвала шифр именем Виженера, несмотря на то, что он ничего не сделал для его создания".

    Шифр Виженера имел репутацию исключительно стойкого к "ручному" взлому. Известный писатель и математик Чарльз Лютвидж Доджсон (Льюис Кэрроллназвал шифр Виженера невзламываемым в своей статье "Алфавитный шифр", опубликованной в детском журнале в 1868 году. В 1917 году Scientific American также отозвался о шифре Виженера, как о неподдающемся взлому. Это представление было опровергнуто после того, как Касиски полностью взломал шифр в XIX веке, хотя известны случаи взлома этого шифра некоторыми опытными криптоаналитиками ещё в XVI веке.

    Шифр Виженера достаточно прост для использования в полевых условиях, особенно если применяются шифровальные диски. Например, "конфедераты" использовали медный шифровальный диск для шифра Виженера в ходе Гражданской войны.
    .2 Процесс шифрования (алгоритм)
    Шифр Виженера представляет собой многоалфавитную систему шифрования. Он является симметричным блочным шифром замены.

    Будем считать, что исходный текст представляет собой строку
    ,
    образованную символами алфавита
    .
    Длина текста - L символов.

    При шифровании текста используется секретный ключ - символьная строка длиной l:
    .
    Чем больше длина ключевого слова (или фразы), тем сложнее взломать шифр, а, значит, тем надежнее защищен текст.

    Для шифрования используется таблица Виженера (Квадрат Виженера), который строится следующим образом: сверху и по левому краю квадрата выписывается исходный алфавит. В первую строку квадрата заносится перестановка из букв алфавита. Во второй строке та же перестановка циклически сдвигается на одну позицию влево, в третьей - на две и т.д. Таким образом, квадрат состоит из N перестановок, и каждой из них соответствует та буква исходного алфавита, которая записана слева от нее. В приложении № 1 представлен пример квадрата Виженера.

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

    Шифрование исходного текста с помощью данного ключа и квадрата Виженера осуществляется следующим образом. Ключевое слово многократно записывается под исходным текстом. Каждая буква исходного текста шифруется при помощи буквенной перестановки, соответствующей той букве ключевого слова, которая стоит под данной буквой исходного текста. Таким образом, k-я буква шифрованного текста находится в квадрате Виженера на пересечении i-й строки и j-го столбца, где i - строка, соответствующая k-й букве исходного текста, а j - строка, соответствующая букве ключевого слова с номером k (mod n), где n - длина ключевого слова.

    Ниже представлен пример шифрования фразы "Белый медведь - самый крупный хищник" при помощи ключевого слова "квадрат" и квадрата Виженера:
    БЕЛЫЙ МЕДВЕДЬ САМЫЙ КРУПНЫЙ ХИЩНИК

    КВАДР АТКВАДР АТКВА ДРАТКВА ДРАТКВ

    ЛЭЛПО ЧНЯЖЗМЧ ДЙУРЩ ЯЕЬШНРЩ ОСОПЙЧ
    Для того чтобы получить первую букву зашифрованного текста - Л, нам необходимо в первой строке таблицы Виженера (Приложение №1) найти букву - Б, которая является первой буквой в строке, которую требуется зашифровать. Буква Б определяет нужный столбец в таблице. В первом столбце таблицы ищется буква - К, которая является первой буквой в строке с повторениями ключа. Буква К определяет в таблице нужную строку. На пересечении столбца - Б, и строки -К, находится искомая буква - Л. Все остальные буквы шифруются аналогично.

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

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

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

    Например, используем пример, который был приведен выше:
    БЕЛЫЙ МЕДВЕДЬ САМЫЙ КРУПНЫЙ ХИЩНИК

    КВАДР АТКВАДР АТКВА ДРАТКВА ДРАТКВ

    ЛЭЛПО ЧНЯЖЗМЧ ДЙУРЩ ЯЕЬШНРЩ ОСОПЙЧ
    Заметим, что в зашифрованном тексте под буквой О были зашифрованы три буквы алфавита - Й, Х, Щ. Таким образом, метод частотного криптоанализа в данном случае бессилен.

    2 глава основной части



    Разработка программы для реализации поставленной задачи
    2.1 Результат работы программы с точки зрения пользователя
    Данное приложение направлено на процесс шифрования информации, в частности слова, строки или текста, написанного при помощи букв русского алфавита. Пользователю, пожелавшему зашифровать тот или иной текст требуется ввести его в файл, затем придумать ключ (кодовое слово), которое необходимо в процессе шифрования. Ключевое слово необходимо запомнить, так как без него зашифрованный текст привести к начальному, незашифрованному состоянию практически невозможно. Так же ключевое слово не следует передавать третьим лицам, так как расшифровать текст, зная ключевое слово, не составит большого труда.

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

    Здравствуй моя хорошая, дорогая, любимая мамочка!!!

    Ключ № 1:

    роза

    Выходная строка:

    Хцхнцабщщн ъэг щикьмшж, вохэъэт, лэгкскч ънооадк!!!

    Ключ № 2:

    пришлавесна

    Выходная строка:

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

    После введения текста в файл и ввода ключевого слова, зашифрованный текст будет записан в файл с именем Result. После окончания работы программы можно будет получить результат ее работы - зашифрованный методом шифрования при помощи кодировки Виженера текст, при использовании заданного ключа.
    2.2 Разработка приложения
    Для того, чтобы решить задачу шифрования используется интегрированная среда разработки Visual Studio C#, шаблон Visual Studio -консольное приложение.

    При решении поставленной задачи, необходимо:

    . Квадрат Виженера (Приложение № 2).

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

    . Ключевое слово.

    Для задания ключевого слова используется строковый тип данных (string). Слово вводится с клавиатуры.

    . Текст, который требуется зашифровать.

    Загружается из файла в строку. И результат также записывается в файл. Для того чтобы файлы стали доступными для использования, необходимо создать файлы типа (txt files (*.txt)|*.txt), c именами для входного файла «Encrypt», для выходного файла «Result». В программе при описании файловых переменных требуется задать адрес нахождения файла.

    3 глава основной части



    Тестирование программы

    .1 Тест №1
    Файл содержит длину нулевой размерности (см. Рисунок 1. Результат работы программы 1):


    Рисунок 1. Результат работы программы 1
    3.2 Тест №2
    Файл сформирован неверно, т.е. не удовлетворяет правилам (Кириллица, пробелы, знаки препинания).

    Пример входной строки, сформированной неверно (см. Рисунок 2. Результат работы программы 2):
    Привет, mama!



    Рисунок 2. Результат работы программы 2
    3.3 Тест №3
    Проверка правильности шифрования (строка без знаков препинания). Поэтапный результат работы программы представлен в приложениях №5 - №9. Таким образом, убеждаемся, что шифрование происходит верно.

    3.4 Тест №4
    Тест для проверки правильности шифрования (строка, в которой есть знаки препинания). Поэтапный результат работы программы представлен в приложениях №10 - №20. Таким образом, убеждаемся, что шифрование происходит верно.

    Заключение


    Цель данной работы заключалась в разработке приложения для решения задачи шифрования текста при помощи шифра Виженера. В ходе разработки приложения были изучены особенности шифрования при помощи данного метода, а именно алгоритм шифрования (Приложение №3 - Блок схема). Консольное приложение, решающее поставленную задачу, написано на языке программирования C#.

    В ходе разработки был освоен новый класс регулярных выражений RegEx, который содержит методы поиска и сравнения для выполнения сопоставления шаблона с текстом. Этот метод в программе использовался при поиске латинских символов в строке. Также неоднократно использовался при написании адаптационного кода для латинского алфавита. Использовать методы класса RegEx намного проще и быстрее, чем, например, задавать диапазон чисел латинского алфавита и кириллицы, используя таблицу кодировки ACSII.

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

    Данный метод шифрования можно использовать и для других алфавитов. В приложении №21 представлен измененный программный код, который позволяет шифровать подобным методом строки на латинском алфавите. В приложении №22 показан результат работы программы.

    В ходе тестирования был проведен анализ работы программы, а именно выявлена зависимость времени выполнения программы от длины входной строки. Результаты анализа представлены на диаграмме (Приложение № 23).

    Глоссарий


    № п/п

    Понятие

    Определение

    1

    Шифр Виженера

    Метод полиалфавитного  шифрования буквенного текста с использованием ключевого слова.

    2

    Алгоритм

    это последовательность команд, предназначенная исполнителю, в результате выполнения которой он должен решить поставленную задачу

    3

    Программа

    это запись алгоритма решения задачи в виде последовательности команд или операторов на языке, который понимает компьютер.

    4

    Консольное приложение

    это компьютерная программа, предназначенная для использования через текстовый компьютерный интерфейс, такой как текстовый терминал, интерфейс командной строки некоторых операционных систем (Unix, DOS, и т.д.)

    5

    Ключ

    секретная информация, используемая криптографическим алгоритмом при зашифровании/расшифровании сообщений, постановке и проверке цифровой подписи, вычислении кодов аутентичности (MAC). 

    6

    Файл

    именованная область данных на носителе информации, используемая как базовый объект взаимодействия с данными в операционных системах.

    7

    Кодирование

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

    8

    Шифрование информации

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

    9

    Кириллица

    система счисления Древней Руси, основанная на алфавитной записи чисел с использованием кириллицы или глаголицы.

    10

    Язык программирования

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

    Список использованных источников


    1

    Керниган Б., Ритчи Д. Язык программирования Си.\Пер. с англ., 3-е изд., испр – СПб.: «Невский Диалект», 2001. – 352с.:ил.

    2

    Академик [электронный ресурс] [режим доступа: http://dic.academic.ru/dic.nsf/ruwiki/702589]

    3

    Математические и компьютерные основы криптологии: учебное пособие / Ю.С.Харин, В.И.Берник, Г.В.Матвеев, С.В.Агиевич. - Мн.: Новое знание, 2003. - 382 с.;


    4

    Информатика: Базовый курс \ С.В. Симонович и др. – СПб,: Питер,2001. – 640 с

    5

    Методы и средства защиты информации (Курс лекций)


    (http://www.citforum.mstu.edu.ru/internet/infsecure/index.shtml)

    6

    Криптография  (http://www.citforum.ru/internet/securities/crypto.shtml)

    7

    Шифр Виженера (http://ru.wikipedia.org/wiki/Шифр_Виженера)

    8

    Соловьева Ю.А. «Элементы криптографии. Часть I Симметричные криптосистемы» Уч.пособие

    9

    Э. М. Габидулин «Курс лекций по Защите Информации»

    10

    Пилиди В. С. Криптография. Вводные главы. — Ростов-на-Дону: ЮФУ, 2009



    Приложения


    Приложение №1

    Таблица. Пример квадрата Виженера



    Приложение № 2

    Квадрат Виженера в программе



    Приложение №3

    Блок-схема программы



    Приложение №4

    Исходный код программы

    using System;System.Collections.Generic;System.Linq;System.Text;System.IO; //класс для работы с файламиSystem.Text.RegularExpressions; //Подключаем новый класс для класс для RegexКурсовая_работа

    {Program

    {static void Sdvig(ref char[] mas) //функция сдвигает строку на еденицу влево

    {j;temp = mas[0];(j = 0; j < 30; j++)

    {[j] = mas[j + 1];

    }[30] = temp;

    } void Main(string[] args)

    {

    {start = DateTime.Now;enpath = @"E:\Курсовая работа\Курсовая работа_new\bin\Debug\Encrypt.txt";repath = @"E:\Курсовая работа\Курсовая работа_new\bin\Debug\Result.txt";

    //строка считывается из файла. Проверка условий праивльного формирования входной строки.s = ""; //строка шифрования= File.ReadAllText(enpath, Encoding.Default);(s.Length == 0)

    {

    Console.WriteLine("Файл пуст! Пожалуйста, введите строку в файл. ");

    return;

    }

    //проверка на наличие символов латинского алфавитаi;pattern2 = @"^[A-Za-z]+$";//регулярное выражение, задающее заглавные и строчные символы латинского алфавитаrgx2 = new Regex(pattern2);//объявлеие нового класса для регулярного выражения(i = 0; i < s.Length; i++)

    {

    //Если символ латинского алфавита

    if (rgx2.IsMatch(Convert.ToString(s[i])))

    {

    Console.WriteLine("Строка в файле сформирована неверно. Строка может содержать только символы кириллицы, пробелы и знаки припенания. ");

    return;

    }

    }

    //КВАДРАТ ВИЖЕНЕРА - ГЕНЕРАЦИЯ

    //описание переменныхj, k = 0; //счетчики[,] kv_Viginer = new char[32, 32]; //матрица квадрата Виженераalfavit = "абвгдежзиклмнопрстуфхцчшщьыъэюя"; //Строка алфавита кириллицы

    //генерация первой строки и первого столбца, т.е. буквы следуют в алфавитном порядке(i = 0; i < 1; i++) //генерация первой строки

    {

    for (j = 1; j < 32; j++)

    {

    kv_Viginer[i, j] = alfavit[k];

    k++;

    }

    k = 0;

    }(i = 1; i < 32; i++) //генерация первого столбца

    for (j = 0; j < 1; j++)

    {

    kv_Viginer[i, j] = alfavit[k];

    k++;

    }

    //заполняем оставшиеся строки и столбцы[] arr = new char[31]; //создаем массив с переставленным алфавитомint a = 37;int b = 31;= 1;(j = 0; j < 31; j++)

    {

    arr[j] = alfavit[(a * k) % b];

    k++;

    }

    // заполним оставшиеся строки и столбцы, циклическим сдвигом на одну еденицу влево= 0;(i = 1; i < 32; i++)

    {

    Sdvig(ref arr); //функция сдвигает строку на еденицу влево

    for (j = 1; j < 32; j++)

    {

    kv_Viginer[i, j] = arr[k];

    k++;

    }

    k = 0;

    }

    //ВВОД КЛЮЧЕВОГО СЛОВАkey = "";.WriteLine("Введите ключевое слово шифра");.Write(">");flag = false; //проверка правильности введенных данных(flag != true)

    {

    flag = true;

    key = Console.ReadLine();

    //Цикл по каждому элементу ключа

    for (i = 0; i < key.Length; i++)

    {

    if ((Convert.ToInt16(key[i]) < 1072) || (Convert.ToInt16(key[i]) > 1103)) //если буква не принадлежит алфавиту

    flag = false;

    }

    //Сообщение об ошибке

    if (flag == false)

    Console.WriteLine("Ключевое слово имеет запрещенные символы, повторите ввод");

    }

    //ПРОЦЕСС ШИФРОВАНИЯx = 0, y = 0; //координаты новой буквы в таблице Вижинераdublicat; //переменная для строчных и заглавных буквregistr = 0; buf = ""; //строка с повторяющимся ключемresult = ""; //строка с результатомnew_key = ""; //строка с повторяющимся ключем, но учтены знаки припинания и пробелы.WriteLine("Строка читается из файла... ");

    //Формирование строки, длиной шифруемой, состоящей из повторений ключа (i = 0; i < s.Length; i++)

    {

    buf += key[i % key.Length];

    }

    //формирование строки, состоящей из повторений ключа, но пропускающей знаки не кириллицыv = 0;(i = 0; i < s.Length; i++)

    {

    //Если не кириллица

    if (((int)(s[i]) < 1040) || ((int)(s[i]) > 1103))

    {

    new_key += " ";

    }

    else

    {

    new_key += buf[v];

    v++;

    }

    }

    //ШИФРОВАНИЕ(i = 0; i < s.Length; i++)

    {

    //Если не кириллица

    if (((int)(s[i]) < 1040) || ((int)(s[i]) > 1103))

    {

    result += s[i];

    }

    else

    {

    //Поиск в первом столбце строки, начинающейся с символа ключа

    int l = 0;

    flag = false;

    //Пока не найден символ

    while ((l < 32) && (flag == false))

    {

    //Если символ найден

    if (new_key[i] == kv_Viginer[l, 0])

    {

    //Запоминаем в х номер строки

    x = l;

    flag = true;

    }

    l++;

    }

    //Уменьшаем временно регистр прописной буквы в шифровальной строке

    if ((Convert.ToInt16(s[i]) < 1072) && (Convert.ToInt16(s[i]) >= 1040)) //диапозон заглавных букв

    {

    dublicat = Convert.ToChar(Convert.ToInt16(s[i]) + 32);

    registr = 1;

    }

    else

    {

    registr = 0;

    dublicat = s[i];

    }

    l = 0;

    flag = false;

    //Пока не найден столбец в первой строке с символом строки

    while ((l < 32) && (flag == false))

    {

    //Проверка совпадения

    if (dublicat == kv_Viginer[0, l])

    {

    //Запоминаем номер столбца

    y = l;

    flag = true;

    }

    l++;

    }

    // Увеличиваем регистр буквы до прописной

    if (registr == 1)

    {

    //Изменяем символ на первоначальный регистр

    dublicat = Convert.ToChar(Convert.ToInt16(kv_Viginer[x, y]) - 32);

    result += dublicat;

    }

    else

    {

    result += kv_Viginer[x, y];

    }

    }

    }

    //Вывод зашифрованной строки.WriteLine("Строка успешно зашифрована!"); .WriteAllText(repath, result); //Вывод результата в файлrezult1 = DateTime.Now - start;.WriteLine("Вермя выполнения программы " + rezult1.ToString());.WriteLine("Длина входной строки = {0} ",s.Length);

    }(Exception e)

    {.WriteLine("Ошибка " + e.Message);

    }

    }

    }

    }


    Приложение

    №5

    Результат тестирования №3 – Шаг 1



    Приложение

    №6

    Результат тестирования №3 – Шаг 2



    Приложение

    №7

    Результат тестирования №3 – Шаг 3



    Приложение

    №8

    Результат тестирования №3 – Шаг 4



    Приложение

    №9

    Результат тестирования №3 – Шаг 5





    Приложение

    №10

    Результат тестирования №4 – Шаг 1




    Приложение

    №11

    Результат тестирования №4 – Шаг 2



    Приложение

    №12

    Результат тестирования №4 – Шаг 3



    Приложение

    №13

    Результат тестирования №4 – Шаг 4





    Приложение

    №14

    Результат тестирования №4 – Шаг 5



    Приложение

    №15

    Результат тестирования №4 – Шаг 6



    Приложение

    №16

    Результат тестирования №4 – Шаг 7




    Приложение

    №17

    Результат тестирования №4 – Шаг 8




    Приложение

    №18

    Результат тестирования №4 – Шаг 9




    Приложение

    №19

    Результат тестирования №4 – Шаг 10





    Приложение

    №20

    Результат тестирования №4 – Шаг 11




    Приложение №21. Адаптация программы под латинский язык

    Исходный код:

    System;System.Collections.Generic;System.Linq;System.Text;System.IO;System.Text.RegularExpressions; //Подключаем новый класс для класс для RegexКурсовая_работа

    {Program

    {static void Sdvig(ref char[] mas) //функция сдвигает строку на еденицу влево

    {j;temp = mas[0];(j = 0; j <25 ; j++)

    {[j] = mas[j + 1];

    }[25] = temp;

    } void Main(string[] args)

    {enpath = @"D:\ВШЭ ДАША\Курсовая работа\Курсовая работа_адаптация\bin\Debug\Encrypt.txt";repath = @"D:\ВШЭ ДАША\Курсовая работа\Курсовая работа_адаптация\bin\Debug\Result.txt";

    //КВАДРАТ ВИЖЕНЕРА - ГЕНЕРАЦИЯ

    //описание переменныхi, j, k = 0; //счетчики[,] kv_Viginer = new char[27, 27]; //матрица квадрата Виженераalfavit = "abcdefghijklmnopqrstuvwxyz"; //Строка алфавита латинского алфавита

    //генерация первой строки и первого столбца, т.е. буквы следуют в алфавитном порядке(i = 0; i < 1; i++) //генерация первой строки

    {(j = 1; j < 27; j++)

    {

    kv_Viginer[i, j] = alfavit[k];

    k++;

    }= 0;

    }(i = 1; i < 27; i++) //генерация первого столбца(j = 0; j < 1; j++)

    {

    kv_Viginer[i, j] = alfavit[k];

    k++;

    }

    //заполняем оставшиеся строки и столбцы[] arr = new char[26]; //создаем массив с переставленным алфавитомint a = 31;int b = 26;= 1;(j = 0; j < 26; j++)

    {[j] = alfavit[(a * k) % b];++;

    }

    // заполним оставшиеся строки и столбцы, циклическим сдвигом на одну еденицу влево= 0;(i = 1; i < 27; i++)

    {(ref arr);(j = 1; j < 27; j++)

    {

    kv_Viginer[i, j] = arr[k];

    k++;

    }= 0;

    }

    //ВВОД КЛЮЧЕВОГО СЛОВАpattern = @"^[a-z]+$"; //ограничение символов для ввода ключевого словаrgx = new Regex(pattern);key = "";.WriteLine("Введите ключевое слово шифра");flag = false; //проверка правильности введенных данных(flag != true)

    {= true;= Console.ReadLine();

    //Цикл по каждому элементу ключа(i = 0; i < key.Length; i++)

    {

    if (rgx.IsMatch(Convert.ToString(key[i]))) flag = true;

    else flag = false;

    if (flag == false)

    {

    Console.WriteLine("Ключевое слово имеет запрещенные символы, повторите ввод");//Сообщение об ошибке

    break;

    }

    }

    }

    //ПРОЦЕСС ШИФРОВАНИЯx = 0, y = 0; //координаты новой буквы в таблице Вижинера s = ""; //строка шифрованияbuf = ""; //строка с повторяющимся ключемresult = ""; //строка с результатомnew_key = "";//строка с повторяющимся ключем, но учтены знаки припинания и пробелы

    .WriteLine("Строка читается из файла... ");= File.ReadAllText(enpath, Encoding.Default);

    //Формирование строки, длиной шифруемой, состоящей из повторений ключа (i = 0; i < s.Length; i++)

    {+= key[i % key.Length];

    }

    //формирование строки, состоящей из повторений ключа, но пропускающей знаки не латинского алфавитаv = 0;(i = 0; i < s.Length; i++)

    {pattern3 = @"^[A-Za-z]+$";rgx3 = new Regex(pattern3);

    //Если латинские буквы(rgx3.IsMatch(Convert.ToString(s[i])))

    {

    new_key += buf[v];

    v++;

    }

    {

    new_key += " ";

    }

    }.WriteLine(s+" <= строка из файла");.WriteLine(new_key+" <= строка из повторений ключа");

    //Шифрование (i = 0; i < s.Length; i++)

    {pattern2 = @"^[A-Za-z]+$";rgx2 = new Regex(pattern2);(i = 0; i < s.Length; i++)

    {

    //Если латинский алфавит

    if (rgx2.IsMatch(Convert.ToString(s[i])))

    {

    //Поиск в первом столбце строки, начинающейся с символа ключа

    int l = 0;

    flag = false;

    //Пока не найден символ

    while ((l < 26) && (flag == false))

    {

    //Если символ найден

    if (new_key[i] == kv_Viginer[l, 0])

    {

    //Запоминаем в х номер строки

    x = l;

    flag = true;

    }

    l++;

    }

    flag = false;

    l = 0;

    //Пока не найден столбец в первой строке с символом строки

    while ((l < 32) && (flag == false))

    {

    //Если символ найден

    if (s[i] == kv_Viginer[0, l])

    {

    //Запоминаем в х номер строки

    y = l;

    flag = true;

    }

    l++;

    }

    result += kv_Viginer[x, y];

    Console.Write(kv_Viginer[x, y]);

    }

    else

    {

    result += s[i];

    Console.Write(s[i]);

    }

    }

    }

    //Вывод на экран зашифрованной строки.WriteLine();.WriteLine("Строка успешно зашифрована!"); .WriteAllText(repath, result); //Вывод результата в файл

    }

    }

    }


    Приложение №22. Тесты программы (адаптации) под латинский язык





    Приложение №23. Диаграмма 1












    написать администратору сайта