Криптография

Написание программы, которая шифрует и расшифровывает сообщения с помощью перестановочного шифра по столбцам. Листинг программы. Разбитие сообщения на блоки по 5 элементов. Создание прямой и инверсной карты шифрования. Результаты работы программы.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 12.05.2020
Размер файла 58,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

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

Кафедра вычислительной техники

Структуры и алгоритмы обработки данных

Лабораторная работа № 8

Криптография

Тула 2019

1. Цель работы

Ознакомиться с методами криптографии.

2. Задание на лабораторную работу

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

3. Листинг программы

#pragma once

namespace SwapColumns {

using namespace System;

using namespace System::ComponentModel;

using namespace System::Collections;

using namespace System::Windows::Forms;

using namespace System::Data;

using namespace System::Drawing;

using namespace cli;

/// <summary>

/// Summary for Form1

///

/// WARNING: If you change the name of this class, you will need to change the

/// 'Resource File Name' property for the managed resource compiler tool

/// associated with all .resx files this class depends on. Otherwise,

/// the designers will not be able to interact properly with localized

/// resources associated with this form.

/// </summary>

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

{

public:

Form1(void)

{

InitializeComponent();

//

//TODO: Add the constructor code here

//

}

protected:

/// <summary>

/// Clean up any resources being used.

/// </summary>

~Form1()

{

if (components)

{

delete components;

}

}

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

protected:

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

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

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

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

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

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

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

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

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

private: System::ComponentModel::IContainer^ components;

private:

/// <summary>

/// Required designer variable.

/// </summary>

#pragma region Windows Form Designer generated code

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

void InitializeComponent(void)

{

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

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

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

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

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

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

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

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

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

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

this->SuspendLayout();

//

// button1

//

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

this->button1->Margin = System::Windows::Forms::Padding(2);

this->button1->Name = L"button1";

this->button1->Size = System::Drawing::Size(246, 22);

this->button1->TabIndex = 0;

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

this->button1->UseVisualStyleBackColor = true;

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

//

// button2

//

this->button2->Location = System::Drawing::Point(97, 115);

this->button2->Margin = System::Windows::Forms::Padding(2);

this->button2->Name = L"button2";

this->button2->Size = System::Drawing::Size(246, 22);

this->button2->TabIndex = 1;

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

this->button2->UseVisualStyleBackColor = true;

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

//

// label1

//

this->label1->AutoSize = true;

this->label1->Location = System::Drawing::Point(9, 20);

this->label1->Margin = System::Windows::Forms::Padding(2, 0, 2, 0);

this->label1->Name = L"label1";

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

this->label1->TabIndex = 3;

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

//

// textBox1

//

this->textBox1->Location = System::Drawing::Point(97, 20);

this->textBox1->Margin = System::Windows::Forms::Padding(2);

this->textBox1->Name = L"textBox1";

this->textBox1->Size = System::Drawing::Size(246, 20);

this->textBox1->TabIndex = 4;

this->textBox1->Text = L"THIS IS A SECRET MESSAGE";

//

// textBox2

//

this->textBox2->Location = System::Drawing::Point(97, 42);

this->textBox2->Margin = System::Windows::Forms::Padding(2);

this->textBox2->Name = L"textBox2";

this->textBox2->Size = System::Drawing::Size(98, 20);

this->textBox2->TabIndex = 5;

this->textBox2->Text = L"CARTS";

//

// textBox3

//

this->textBox3->Location = System::Drawing::Point(97, 92);

this->textBox3->Margin = System::Windows::Forms::Padding(2);

this->textBox3->Name = L"textBox3";

this->textBox3->Size = System::Drawing::Size(246, 20);

this->textBox3->TabIndex = 6;

//

// textBox4

//

this->textBox4->Location = System::Drawing::Point(97, 141);

this->textBox4->Margin = System::Windows::Forms::Padding(2);

this->textBox4->Name = L"textBox4";

this->textBox4->Size = System::Drawing::Size(246, 20);

this->textBox4->TabIndex = 7;

//

// label2

//

this->label2->AutoSize = true;

this->label2->Location = System::Drawing::Point(9, 42);

this->label2->Margin = System::Windows::Forms::Padding(2, 0, 2, 0);

this->label2->Name = L"label2";

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

this->label2->TabIndex = 8;

this->label2->Text = L"КЛЮЧ";

//

// label3

//

this->label3->AutoSize = true;

this->label3->Location = System::Drawing::Point(9, 92);

this->label3->Margin = System::Windows::Forms::Padding(2, 0, 2, 0);

this->label3->Name = L"label3";

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

this->label3->TabIndex = 9;

this->label3->Text = L"Зашифр. текст";

//

// label4

//

this->label4->AutoSize = true;

this->label4->Location = System::Drawing::Point(9, 141);

this->label4->Margin = System::Windows::Forms::Padding(2, 0, 2, 0);

this->label4->Name = L"label4";

this->label4->Size = System::Drawing::Size(82, 13);

this->label4->TabIndex = 10;

this->label4->Text = L"Расшфр. текст";

//

// Form1

//

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

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

this->ClientSize = System::Drawing::Size(350, 176);

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

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

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

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

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

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

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

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

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

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

this->Margin = System::Windows::Forms::Padding(2);

this->Name = L"Form1";

this->Text = L"Form1";

this->ResumeLayout(false);

this->PerformLayout();

}

#pragma endregion

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

textBox3->Text = ToChunks(

crypt(textBox1->Text->ToUpper()->Replace(" ", ""),

textBox2->Text, false));

}

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

textBox4->Text = ToChunks(

crypt(textBox3->Text->ToUpper()->Replace(" ", ""),

textBox2->Text, true));

}

private:

//Производит шифрование.

System::String^ crypt(System::String^ message, System::String^ key, System::Boolean Decrypt)

{

System::String ^result;

array< Int32 > ^mapping;

array< Int32 >^ forward_mapping = gcnew array< Int32 >(key->Length);

array< Int32 >^ inverse_mapping = gcnew array< Int32 >(key->Length);

//Используя ключевое слово, создаём карту шифрования

make_mapping(key, forward_mapping, inverse_mapping);

if(Decrypt){mapping = inverse_mapping/*DeCrypt*/;}else{mapping = forward_mapping/*EnCrypt*/;}

//Дополняем, что бы сообщение было кратно ключевому слову

Int32 lenght = message->Length % mapping->Length;

if (lenght) {

for (Int32 i = 0; i < (mapping->Length - lenght); i++){

message += "X";

}

}

//Шифруем или расшифровываем

for (Int32 j = 0; j < message->Length; j += mapping->Length){

for (Int32 i = 0; i < mapping->Length; i++){

Int32 a = mapping[i];

result += message[j + a];

}

}

return result;

}

//Разбивает сообщение на блоки по 5 элементов

System::String^ ToChunks(System::String^ message)

{

message += " ";

System::String ^result = "";

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

result += message->Substring(i, 5) + " ";

}

return result;

}

//Создаёт прямую и инверсную карту шифрования

void make_mapping(String ^key, array< Int32 > ^forward_mapping , array< Int32 > ^inverse_mapping )

{

array<Char> ^chars = key->ToCharArray();

Array::Sort(chars);

String ^sorted_key = gcnew String(chars);

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

forward_mapping[i] = sorted_key->IndexOf(key[i]);

}

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

inverse_mapping[forward_mapping[i]] = i;

}

}

};

}

программа шифр карта сообщение

Результаты работы программы

Рис. 1

Вывод

В ходе проделанной работы ознакомились с методами криптографии.

Контрольные вопросы

1. Что такое криптография?

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

2.Что такое блочный шифр?

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

3.Что такое подстановочные шифры, перестановочные шифры?

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

Шифры подстановки. В шифрах подстановки буквы открытого текста заменяются другими.

4.Что такое шифр Цезаря?

Шифр Цезаря один из наиболее древнейших известных шифров. Схема шифрования очень проста -- используется сдвиг буквы алфавита на фиксированное число позиций. Используемое преобразование обычно обозначают как ROTN, где N -- сдвиг, ROT -- сокращение от слова ROTATE, в данном случае «циклический сдвиг».

5.Что такое маршрутный шифр?

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

6.Что такое шифр Виженера?

В шифре Фейстеля, названном в честь криптографа Хорста Фейстеля, сообщение разбивается пополам на левую и правую части -- L0 и R0. К правой части применяется функция, и полученный результат совмещается с левой частью с помощью операции XOR. Затем эти два фрагмента меняются местами и процесс повторяется определенное количество раундов.

7.Что такое одноразовый блокнот?

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

8.Что такое алгоритм RSA?

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

В других типах шифрования для кодирования и декодирования сообщения используется один и тот же ключ, поэтому их называют симметричными. Одним из самых известных алгоритмов шифрования с открытым ключом является RSA, названный в честь тех, кто впервые его описал: Рональда Ривеста, Ади Шамира и Леонарда Адлемана.

9.Области применения криптографии?

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

Размещено на Allbest.ru

...

Подобные документы

  • Проблема скрытия и защиты информации от несанкционированного использования. История создания шифра. Решения задачи шифрования текста и кодирования данных. Тестирование полученного приложения и анализ работы программы с точки зрения пользователя.

    курсовая работа [3,0 M], добавлен 24.11.2013

  • Создание программы на языке программирования С#, которая проверяет наличие в матрице хотя бы одного столбца, содержащего положительный элемент, поиск его номера. Упорядочивание его элементов по возрастанию. Листинг программы и инструкция по работе с ней.

    курсовая работа [1,9 M], добавлен 28.05.2014

  • Характеристика программы на языке VBA, которая вводит исходные данные, выполняет расчеты и выводит результаты на экран. Описание переменных в программе, ее блок-схема и алгоритм работы. Листинг программы. Описание входных данных и результат вычислений.

    курсовая работа [721,4 K], добавлен 10.11.2010

  • Симметричные и асиметричные методы шифрования. Шифрование с помощью датчика псевдослучайных чисел. Алгоритм шифрования DES. Российский стандарт цифровой подписи. Описание шифрования исходного сообщения асимметричным методом с открытым ключом RSA.

    курсовая работа [101,1 K], добавлен 09.03.2009

  • История развития криптографии, ее основные понятия. Простейший прием дешифровки сообщения. Основные методы и способы шифрования, современный криптографический анализ. Перспективы развития криптографии. Создание легкого для запоминания и надежного пароля.

    курсовая работа [3,9 M], добавлен 18.12.2011

  • Программа на языке Turbo Pascal для шифрования данных с помощью шифра Тритемиуса. Входные, выходные данные. Схема алгоритма и текст программы. Порядок ввода исходных данных и описание получаемых результатов. Тестовых задания и анализ их функционирования.

    курсовая работа [4,0 M], добавлен 06.01.2011

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

    курсовая работа [7,8 M], добавлен 19.09.2010

  • Методика разработки, практической апробации программы в среде Turbo Pascal по построению графика прямой линии регрессии. Формирование блок-схемы данной программы, ее листинг. Построение графика с помощью математических формул и графического модуля Graph.

    контрольная работа [46,2 K], добавлен 22.07.2011

  • Основные программы, функционирующие в среде Windows и поддерживающие диалоговые окна и другие возможности. Разработка программы на языке Builder C++ 6.0, осуществляющей выдачу сообщения в заданное время. Описание ее алгоритмов. Общие сведения о IBM PC.

    курсовая работа [49,1 K], добавлен 13.11.2009

  • Разработка программы на языке VBA, которая вводит исходные данные, выполняет расчеты и выводит на экран заданную информацию. Типы блок-схем и их использование при написании программы. Описание входных данных и результат вычислений, листинг программы.

    курсовая работа [680,3 K], добавлен 03.08.2009

  • Написание программы "телеграф", который принимает от пользователя сообщения и выводит его на экран в виде последовательности точек и тире. Их вывод сортируется звуковым сигналом соответствующей длительности. Программа написана на языке Turbo Pascal.

    курсовая работа [565,6 K], добавлен 18.08.2008

  • Схема работы и требования к программам шифрования и дешифрования. Алгоритмы и тексты программы шифрования и программы дешифрования, выполненные на языке программирования C/C++. Содержание файла с исходным текстом, с шифротекстом, с дешифрованным текстом.

    курсовая работа [24,7 K], добавлен 20.10.2014

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

    отчет по практике [445,6 K], добавлен 22.11.2016

  • Основы программирования на 32-битном Ассемблере, разработка с его помощью программы, демонстрирующей работу одного из разделов ОС Windоws. Описание используемых АРI-функций как интерфейса программирования приложений. Листинг программы, результаты работы.

    курсовая работа [164,5 K], добавлен 18.05.2014

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

    лабораторная работа [858,0 K], добавлен 23.11.2014

  • Написание прикладного Windows-приложения на примере программы-органайзера, позволяющей вести электронный ежедневник и телефонную записную книжку. Описание блок-схемы программы и операционной системы. Листинг результатов обработки на контрольном примере.

    дипломная работа [2,5 M], добавлен 29.12.2014

  • Изучение основных этапов проектирования программных систем, создание прикладной программы, которая выполняет решение систем линейных алгебраических уравнений методом Гаусса. Вычисление определителя и обращение матриц. Листинг разработанной программы.

    курсовая работа [563,3 K], добавлен 12.07.2012

  • Разработка программы-интерпретатора, способной получать на входе текстовый файл (в формате ASCII или ANSI) с текстом программы и на выходе выводить на экран результаты вычислений, определяемых программистом. Выбор лексем, интерфейс и листинг программы.

    курсовая работа [132,0 K], добавлен 12.03.2013

  • Написание программы для работы с клиентами средствами языка Delphi, которая предусматривает ввод, редактирование и удаление информации. Разработка алгоритма решения задачи, описание переменных, вспомогательных процедур, входных и выходных данных.

    курсовая работа [355,7 K], добавлен 21.09.2010

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

    контрольная работа [81,1 K], добавлен 29.04.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.