Laboratornaya_rabota_3_MSA



2

 

Министерство образования и науки Российской Федерации

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

Югорский государственный университет

 

 

 

 

 

Лабораторная работа № 3 по теме:

«Основы шифрования информации. Шифр Цезаря.»

 

 

 

Выполнил: студент группы 1531б

Михайлов С.А.

______________

(подпись)

 

Проверил: Гончаренко О.В.

 

______________

(подпись)

 

 

 

 

 

Ханты-Мансийск 2016

Цель: освоить технологию шифрования и дешифрования информации с использованием шифра Цезаря.

Задание 1. Реализовать приложение (согласно варианту) для шифрования информации с использованием шифра Цезаря.

Задание 2. Оформить отчет по лабораторной работе согласно Правилам оформления отчетов.

Таблица 1 — Задание

Вид приложения

Используемые группы символов

Визуальное

Маленькие латинские буквы (az)

 

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

Приложение было реализовано с помощью языка C++. Графический интерфейс реализован с помощью Windows Forms, являющийся частью Microsoft .NET Framework.

Программа позволяет шифровать и расшифровывать текст. Для этого нужно вставить его в соответствующее поле (если нужно зашифровать, то текст вставляется в поле «Открытый текст», а если, наоборот, дешифровать, то в поле «Зашифрованный текст»), выбрать величину смещения (ключ) и нажать соответствующую кнопку (рисунок 1).

Листинг:

#pragma once

 

 

namespace Lab3 {

 

   using namespace System;

   using namespace System::ComponentModel;

   using namespace System::Collections;

   using namespace System::Windows::Forms;

   using namespace System::Data;

   using namespace System::Drawing;

 

   

   public ref class Form1 : public System::Windows::Forms::Form

   {

   public:

      Form1(void)

      {

         InitializeComponent();

         //

         //TODO: добавьте код конструктора

         //

      }

 

   protected:

      /// <summary>

      /// Освободить все используемые ресурсы.

      /// </summary>

      ~Form1()

      {

         if (components)

         {

            delete components;

         }

      }

 

   private: System::Windows::Forms::TextBox^ textBox1;

   private: System::Windows::Forms::TextBox^ textBox2;

 

 

   private: System::Windows::Forms::Label^ label1;

   private: System::Windows::Forms::Label^ label2;

   private: System::Windows::Forms::Label^ label3;

   private: System::Windows::Forms::NumericUpDown^ numericUpDown1;

   private: System::Windows::Forms::Button^ button2;

   private: System::Windows::Forms::Button^ button1;

 

   protected:

 

   private:

      /// <summary>

      /// Требуется переменная конструктора.

      /// </summary>

      System::ComponentModel::Container ^components;

 

#pragma region Windows Form Designer generated code

      /// <summary>

      /// Обязательный метод для поддержки конструктора — не изменяйте

      /// содержимое данного метода при помощи редактора кода.

      /// </summary>

      void InitializeComponent(void)

      {

         this->textBox1 = (gcnew System::Windows::Forms::TextBox());

         this->textBox2 = (gcnew System::Windows::Forms::TextBox());

         this->label1 = (gcnew System::Windows::Forms::Label());

         this->label2 = (gcnew System::Windows::Forms::Label());

         this->label3 = (gcnew System::Windows::Forms::Label());

         this->numericUpDown1 = (gcnew System::Windows::Forms::NumericUpDown());

         this->button2 = (gcnew System::Windows::Forms::Button());

         this->button1 = (gcnew System::Windows::Forms::Button());

         (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->numericUpDown1))->BeginInit();

         this->SuspendLayout();

         //

         // textBox1

         //

         this->textBox1->Location = System::Drawing::Point(16, 27);

         this->textBox1->Multiline = true;

         this->textBox1->Name = L«textBox1»;

         this->textBox1->Size = System::Drawing::Size(357, 58);

         this->textBox1->TabIndex = 1;

         //

         // textBox2

         //

         this->textBox2->Location = System::Drawing::Point(16, 104);

         this->textBox2->Multiline = true;

         this->textBox2->Name = L«textBox2»;

         this->textBox2->Size = System::Drawing::Size(357, 58);

         this->textBox2->TabIndex = 1;

         //

         // label1

         //

         this->label1->AutoSize = true;

         this->label1->Location = System::Drawing::Point(13, 11);

         this->label1->Name = L«label1»;

         this->label1->Size = System::Drawing::Size(90, 13);

         this->label1->TabIndex = 3;

         this->label1->Text = L«Открытый текст«;

         //

         // label2

         //

         this->label2->AutoSize = true;

         this->label2->Location = System::Drawing::Point(10, 88);

         this->label2->Name = L«label2»;

         this->label2->Size = System::Drawing::Size(123, 13);

         this->label2->TabIndex = 3;

         this->label2->Text = L«Зашифрованный текст«;

         //

         // label3

         //

         this->label3->AutoSize = true;

         this->label3->Location = System::Drawing::Point(13, 165);

         this->label3->Name = L«label3»;

         this->label3->Size = System::Drawing::Size(33, 13);

         this->label3->TabIndex = 3;

         this->label3->Text = L«Ключ«;

         //

         // numericUpDown1

         //

         this->numericUpDown1->Location = System::Drawing::Point(16, 182);

         this->numericUpDown1->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) {25, 0, 0, 0});

         this->numericUpDown1->Name = L«numericUpDown1»;

         this->numericUpDown1->Size = System::Drawing::Size(120, 20);

         this->numericUpDown1->TabIndex = 4;

         //

         // button2

         //

         this->button2->Location = System::Drawing::Point(231, 220);

         this->button2->Name = L«button2»;

         this->button2->Size = System::Drawing::Size(96, 23);

         this->button2->TabIndex = 2;

         this->button2->Text = L«Расшифровать«;

         this->button2->UseVisualStyleBackColor = true;

         this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click);

         //

         // button1

         //

         this->button1->Location = System::Drawing::Point(65, 220);

         this->button1->Name = L«button1»;

         this->button1->Size = System::Drawing::Size(96, 23);

         this->button1->TabIndex = 0;

         this->button1->Text = L«Зашифровать«;

         this->button1->UseVisualStyleBackColor = true;

         this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);

         //

         // Form1

         //

         this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);

         this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;

         this->ClientSize = System::Drawing::Size(392, 257);

         this->Controls->Add(this->label3);

         this->Controls->Add(this->label2);

         this->Controls->Add(this->label1);

         this->Controls->Add(this->textBox1);

         this->Controls->Add(this->textBox2);

         this->Controls->Add(this->button1);

         this->Controls->Add(this->button2);

         this->Controls->Add(this->numericUpDown1);

         this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedSingle;

         this->Name = L«Form1»;

         this->Text = L«Шифр Цезаря«;

         (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->numericUpDown1))->EndInit();

         this->ResumeLayout(false);

         this->PerformLayout();

 

      }

#pragma endregion

   private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

            // Получаем открытый текст

            String ^ openText = this->textBox1->Text;

            // Зашифрованный текст пока пустой

            String ^ cipherText = «»;

            // Получаем значение ключа (сдвига)

            Decimal key = this->numericUpDown1->Value;

 

            // В цикле сдвигаем каждую букву на значение ключа

            for (int i = 0; i < openText->Length; i++) {

               // Если символ на входит в множество a,b,c,…,z

               // то пропускаем его

               if (openText[i] < ‘a’ || openText[i] > ‘z’)

                  continue;

 

               // openText[i] — ‘a’ — вычитаем код символа ‘a’ из кода символа, чтобы начать отсчет с нуля, т.е. a = 0, b = 1, c = 2, …

               // + key — прибавляем значение сдвига ключа

               // ) % 26 — берем остаток от деления на 26, чтобы получить цикличность сдвига

               // + ‘a’ — прибавляем кода символа ‘a’, который до этого вычли, чтобы вновь получить код символа

               // (__wchar_t) — превращаем числовой код в символ

               cipherText += (__wchar_t)( (openText[i] — ‘a’ + key) % 26 + ‘a’ );

            }

 

            // Записываем полученный зашифрованный текст в соответствующее поле

            this->textBox2->Text = cipherText;

          }

    private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {

            // Получаем зашифрованный текст

            String ^ cipherText = this->textBox2->Text;

            // Открытый текст пока пустой

            String ^ openText = «»;

            // Получаем значение ключа (сдвига)

            Decimal key = this->numericUpDown1->Value;

 

            // В цикле сдвигаем каждую букву на значение ключа

            for (int i = 0; i < cipherText->Length; i++) {

               // Если символ на входит в множество a,b,c,…,z

               // то пропускаем его

               if (cipherText[i] < ‘a’ || cipherText[i] > ‘z’)

                  continue;

 

               // openText[i] — ‘a’ — вычитаем код символа ‘a’ из кода символа, чтобы начать отсчет с нуля, т.е. a = 0, b = 1, c = 2, …

               // + key — прибавляем значение сдвига ключа

               // + 26 — прибавляем 26, чтобы не было отрицательного числа

               // ) % 26 — берем остаток от деления на 26, чтобы получить цикличность сдвига

               // + ‘a’ — прибавляем кода символа ‘a’, который до этого вычли, чтобы вновь получить код символа

               // (__wchar_t) — превращаем числовой код в символ

               openText += (__wchar_t)( (cipherText[i] — ‘a’ — key + 26) % 26 + ‘a’ );

            }

            

            // Записываем полученный открытый текст в соответствующее поле

            this->textBox1->Text = openText;

          }

      };

 

}

 

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

 

Вывод: освоил технологию шифрования и дешифрования информации с использованием шифра Цезаря.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *