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

  • MainWindow . xaml . cs

  • MainWinsow.xaml

  • Курсовая работа по языкам программирования. Языки программирования 3 Вариант. Курсовая работа по языкам программирования Вариант 3 (Ф. И. О. студента)


    Скачать 32.65 Kb.
    НазваниеКурсовая работа по языкам программирования Вариант 3 (Ф. И. О. студента)
    АнкорКурсовая работа по языкам программирования
    Дата25.01.2022
    Размер32.65 Kb.
    Формат файлаdocx
    Имя файлаЯзыки программирования 3 Вариант.docx
    ТипКурсовая
    #341382


    МИНОБРНАУКИ РОССИИ

    Федеральное государственное бюджетное образовательное учреждение

    высшего образования

    «Тверской государственный технический университет»

    (ТвГТУ)
    Кафедра «Информационные системы»

    КУРСОВАЯ РАБОТА

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

    Вариант 3


    Выполнил:
    ____________________________________

    (Ф.И.О. студента)

    _____________________________ ______

    (полное название группы)

    ____________________________________

    (№ зачетной книжки)
    Проверил: ______________________

    «_______» _______________ 2021 г.


    Тверь 2021

    Задание


    Написать offline программу для шифрования текста с помощью шифра Цезаря.


    Содержание



    Задание 2

    Содержание 3

    Введение 4

    1. Аналитическая часть 5

    1.1. Описание языков программирования 6

    1.2. Обоснования для выбора языка программирования 8

    1.3. Алгоритм выполнения задачи 9

    2. Код выполнения 10

    Выводы 13

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


    Введение


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

    Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите. Например, в шифре со сдвигом вправо на 3, «А» была бы заменена на «Г», «Б» станет «Д», и так далее.

    Шифр назван в честь римского полководца Гая Юлия Цезаря, использовавшего его для секретной переписки со своими генералами.

    Шаг шифрования, выполняемый шифром Цезаря, часто включается как часть более сложных схем, таких как шифр Виженера, и всё ещё имеет современное приложение в системе ROT13. Как и все моноалфавитные шифры, шифр Цезаря легко взламывается и не имеет почти никакого применения на практике.

    Математическая модель шифра Цезаря:

    Если сопоставить каждому символу алфавита его порядковый номер (нумеруя с 0), то шифрование и дешифрование можно выразить формулами модульной арифметики:

    y = (x + k) mod n

    x = (y − k) mod n,

    где x – символ открытого текста, y – символ шифрованного текста, n – мощность алфавита, а k – ключ.


    1. Аналитическая часть


    Основная задача курсовой работы – написать offline программу для шифрования текста с помощью шифра Цезаря.

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

    Шифр Цезаря называют в честь Юлия Цезаря, который, согласно «Жизни двенадцати цезарей», использовал его со сдвигом 3, чтобы защищать военные сообщения. Хотя Цезарь был первым зафиксированным человеком, использовавшим эту схему, другие шифры подстановки, как известно, использовались и ранее.

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

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

    Необходимо выделить, что алгоритм будет обрабатывать только символы алфавита. Цифры, пробелы и печатные знаки должны остаться неизменными. Так же предусмотреть возможность изменения ключа, для упрощения остановимся на диапазоне от 3 до 15.

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

    1.1. Описание языков программирования


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

    С++

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

    Python

    Высокоуровневый язык программирования общего назначения с динамической строгой типизацией и автоматическим управлением памятью, ориентированный на повышение производительности разработчика, читаемости кода и его качества, а также на обеспечение переносимости написанных на нём программ. Язык является полностью объектно-ориентированным — всё является объектами. Необычной особенностью языка является выделение блоков кода пробельными отступами. Синтаксис ядра языка минималистичен, за счёт чего на практике редко возникает необходимость обращаться к документации. Сам же язык известен как интерпретируемый и используется, в том числе для написания скриптов. Недостатками языка являются зачастую более низкая скорость работы и более высокое потребление памяти написанных на нём программ по сравнению с аналогичным кодом, написанным на компилируемых языках.

    Delphi

    Императивный, структурированный, объектно-ориентированный, высокоуровневый язык программирования со строгой статической типизацией переменных. Основная область использования — написание прикладного программного обеспечения. При создании языка (и здесь качественное отличие от языка C) не ставилось задачи обеспечить максимальную производительность исполняемого кода или лаконичность исходного кода для экономии оперативной памяти. Изначально язык ставил во главу угла стройность и высокую читаемость, поскольку был предназначен для обучения дисциплине программирования. Эта изначальная стройность в дальнейшем, как по мере роста аппаратных мощностей, так и в результате появления новых парадигм, упростила расширение языка новыми конструкциями.

    Java

    Строго типизированный объектно-ориентированный язык программирования общего назначения, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Разработка ведётся сообществом, организованным через Java Community Process; язык и основные реализующие его технологии распространяются по лицензии GPL. Права на торговую марку принадлежат корпорации Oracle. Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой компьютерной архитектуре, для которой существует реализация виртуальной Java-машины. Занимает высокие места в рейтингах популярности языков программирования

    C#

    Объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров компании Microsoft под руководством Андерса Хейлсберга и Скотта Вильтаумота как язык разработки приложений для платформы Microsoft .NET Framework. Впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270. C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, переменные, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.

    1.2. Обоснования для выбора языка программирования


    Для написания программы был выбран C#. Преимущества, которые дает C# по сравнению с остальными высокоуровневыми языками:

    - Лаконичная структура для desktop приложения;

    - Возможность сделать мультиплатформенное приложение;

    - Понятный и легко адаптируемый алгоритм шифрования;

    - Возможность перенести алгоритм в frontend приложение, без изменений;

    - Возможность выделить алгоритм в отдельную библиотеку для использования в различных приложениях, написанных не на C#;

    - Высокая отказоустойчивость приложения;

    - Активно развивающийся язык программирования;

    - Большая доля специалистов на рынке труда, способных к поддержке и сопровождению программного продукта;

    - Среднестатистическая оплата специалиста составляет порядка $89000 в год;

    - Открытая официальная документация постоянно обновляется;

    Из недостатков программ, написанных на C#, стоит отметить:

    - Возможность декомпилировать приложение на C#, если есть необходимость использовать коммерчески ценный код, стоит выделить его в отдельную библиотеку, написанную например на C++ для использования в целевой программе.

    - Для комфортного сопровождения желательно использовать Microsoft Visual Studio, которая на данный момент является ресурсоемким приложением.

    1.3. Алгоритм выполнения задачи


    Через перечисление описан набор символов «а-я, А-Я, a-z и A-Z».

    Алгоритм принимает текст, шаг сдвига и направление работы (шифровать/дешифровывать). Проходит по тексту и посимвольно переводит в шифр, если это буквы из перечисления, остальные символы переносит без изменений. Возвращенное значение имеет тип «строка», которое помещается в своё поле на desktop приложении.

    Так же предусмотрено поле ввода шага сдвига, которое принимает только цифры, если введено значение меньше 3 или больше 15, автоматически подставляет шаг сдвига 4.

    2. Код выполнения


    Код представлен 2 блоками: логическим и интерфейсным блоком приложения. Код был максимально скомпонован:
    MainWindow.xaml.cs
    using System;

    using System.Windows;

    using System.Windows.Input;
    namespace Vsevolozhskii_B.IST.RVS._20._35_Variant_3

    {

    ///

    /// Interaction logic for MainWindow.xaml

    ///


    public partial class MainWindow : Window

    {

    private string t_Encryption = string.Empty;

    private string t_Decryption = string.Empty;

    private string temp = string.Empty;

    private int shift_n;

    private enum Symbol

    {

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

    А, Б, В, Г, Д, Е, Ё, Ж, З, И, Й, К, Л, М, Н, О, П, Р, С, Т, У, Ф, Х, Ц, Ч, Ш, Щ, Ъ, Ы, Ь, Э, Ю, Я,

    a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z,

    A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z

    }

    public MainWindow()

    {

    shift_n = Convert.ToInt32(shift_num);

    if (shift_n < 3 || shift_n > 15) shift_n = 4;

    InitializeComponent();

    }

    private void btn_Encryption(object sender, RoutedEventArgs e)

    {

    t_Decryption = decryption.Text;

    temp = Trans_Info(t_Decryption, shift_n);

    encryption.Text = temp;

    }

    private void btn_Decryption(object sender, RoutedEventArgs e)

    {

    t_Encryption = encryption.Text;

    temp = Trans_Info(t_Encryption, shift_n, false);

    decryption.Text = temp;

    }

    private string Trans_Info(string str, int shift, bool check = true)

    {

    string temp_str = string.Empty;

    shift = check ? shift : -1 * shift;

    int enum_Count = Enum.GetNames(typeof(Symbol)).Length;

    int index, temp_Index;

    for (int i = 0; i < str.Length; i++)

    {

    if (Enum.IsDefined(typeof(Symbol), Convert.ToString(str[i])))

    {

    index = Convert.ToInt32(Enum.Parse(typeof(Symbol), str[i].ToString()));

    temp_Index = index + shift;
    if (temp_Index <= 0) temp_str += Enum.GetName(typeof(Symbol), enum_Count - (Math.Abs(shift) - index));

    else if (temp_Index > enum_Count) temp_str += Enum.GetName(typeof(Symbol), temp_Index - enum_Count);

    else temp_str += Enum.GetName(typeof(Symbol), index + shift);

    }

    else temp_str += str[i];

    }

    return temp_str;

    }

    private void check_key(object sender, KeyEventArgs e)

    {

    char number = (char)e.Key;

    if(Char.IsDigit(number)) e.Handled = true;

    }

    }

    }

    MainWinsow.xaml

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    mc:Ignorable="d"

    Title="MainWindow" Height="450" Width="800">









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