Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР1 ЭВМ отчет.doc
Скачиваний:
1
Добавлен:
05.09.2019
Размер:
115.2 Кб
Скачать

Федеральное агентство по образованию РФ

ФГБОУ ВПО «ИжГТУ им. М.Т. Калашникова»

Кафедра « Мехатронные системы»

Отчет по лабораторной работе № 1

Тема: «Криптоанализ»

Вариант № 3

Выполнил:

студент гр. 8-05-3

Клековкин А. В.

Проверила:

Зубкова Ю.В.

Ижевск 2012

Содержание

Техническое задание 3

Введение 4

1. Разработка алгоритма 5

2. Разработка программы 6

3. Вычислительный эксперимент 10

Заключение 11

Литература 11

Техническое задание

Разработать алгоритм и программу расшифровки по методу латинских квадратов.

5×5/11×11. Запись - по столбцам, считывание - по строкам.

Введение

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

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

В зависимости от структуры используемых ключей методы шифрования подразделяются на:

  • симметричное шифрование: посторонним лицам может быть известен алгоритм шифрования, но неизвестна небольшая порция секретной информации — ключа, одинакового для отправителя и получателя сообщения;

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

1. Разработка алгоритма

Схема алгоритма программы расшифровки по методу латинских квадратов, представлена на рисунке 1.

Рисунок 1 – Схема алгоритма программы расшифровки по методу латинских квадратов.

2. Разработка программы

Программа представлена на рисунке 2.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace Shifrovanie

{

public partial class Form1 : Form

{

public int n = 0;

public char[][,] a;

public char[][,] b;

public int razmer_1_kvadrat;

public int razmer_2_kvadrat;

public int count_1_kvadrat;

public int count_2_kvadrat;

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

string vvod="",prom="",rez="";

try

{

razmer_1_kvadrat = Convert.ToInt32(textBox4.Text);

count_1_kvadrat = Convert.ToInt32(textBox6.Text);

razmer_2_kvadrat = Convert.ToInt32(textBox5.Text);

count_2_kvadrat = Convert.ToInt32(textBox7.Text);

}

catch

{

return;

}

this.a = new char[count_1_kvadrat][,];

for (int i = 0; i < count_1_kvadrat; i++)

{

a[i] = new char[razmer_1_kvadrat, razmer_1_kvadrat];

}

this.b = new char[count_2_kvadrat][,];

Рисунок 2 – Текст программы расшифровки по методу латинских квадратов.

for (int i = 0; i < count_2_kvadrat; i++)

{

b[i] = new char[razmer_2_kvadrat, razmer_2_kvadrat];

}

//если ничего не ввели выходим

if (textBox1.Text.Length != 0)

{

vvod = textBox1.Text;

}

else return;

//заполняем первые квадраты по столбцам

n = 0;

for (int z = 0; z < count_1_kvadrat; z++)

{

a[z]=write_matrix(razmer_1_kvadrat, vvod,'0');

}

//записываем промежуотчный массив по строкам

for (int z = 0; z < count_1_kvadrat; z++)

{

prom += read_matrix(razmer_1_kvadrat, a[z],'0');

}

//заполняем вторые квадраты

n = 0;

for (int z = 0; z < count_2_kvadrat; z++)

{

b[z] = write_matrix(razmer_2_kvadrat, prom,'1');

}

//записываем выходной массив по строкам

for (int z = 0; z < count_2_kvadrat; z++)

{

rez += read_matrix(razmer_2_kvadrat, b[z],'1');

}

//вывод квадратов

for (int z = 0; z < count_2_kvadrat; z++)

{

for (int i = 0; i < razmer_2_kvadrat; i++)

{

for (int j = 0; j < razmer_2_kvadrat; j++)

{

textBox3.Text += b[z][i, j];

textBox3.Text += '\t';

}

textBox3.AppendText("\r\n");

}

textBox3.AppendText("\r\n");

textBox3.AppendText("\r\n");

}

//вывод результата строки

textBox2.Clear();

textBox2.AppendText(rez);

}

Рисунок 2 – Продолжение.

char[,] write_matrix(int kol, string vvod, char zap)

{

char[,] a = new char[kol, kol];

for (int j = 0; j < kol; j++)

{

for (int i = 0; i < kol; i++)

{

if (n >= vvod.Length)

{

a[i, j] = zap;

}

else

{

if (vvod[n] == ' ')

{

a[i, j] = '*';

n++;

}

else

{

a[i, j] = vvod[n];

n++;

}

}

}

}

return a;

}

string read_matrix(int kol, char[,] a,char zap)

{

string s;

s = "";

for (int i = 0; i < kol; i++)

{

for (int j = 0; j < kol; j++)

{

if(j==0 && a[i,j]==zap)

{

break;

}

s += a[i, j];

}

}

return s;

}

private void button2_Click(object sender, EventArgs e)

{

string vvod = "", prom = "", rez = "";

try

{

razmer_1_kvadrat = Convert.ToInt32(textBox4.Text);

count_1_kvadrat = Convert.ToInt32(textBox6.Text);

razmer_2_kvadrat = Convert.ToInt32(textBox5.Text);

count_2_kvadrat = Convert.ToInt32(textBox7.Text);

}

catch

{

return;

}

Рисунок 2 – Продолжение.

this.a = new char[count_1_kvadrat][,];

for (int i = 0; i < count_1_kvadrat; i++)

{

a[i] = new char[razmer_1_kvadrat, razmer_1_kvadrat];

}

this.b = new char[count_2_kvadrat][,];

for (int i = 0; i < count_2_kvadrat; i++)

{

b[i] = new char[razmer_2_kvadrat, razmer_2_kvadrat];

}

//если ничего не ввели выходим

if (textBox1.Text.Length != 0)

{

vvod = textBox1.Text;

}

else return;

//заполняем вторые квадраты по столбцам

n = 0;

for (int z = 0; z < count_2_kvadrat; z++)

{

b[z] = write_matrix(razmer_2_kvadrat, vvod, '0');

}

//записываем промежуотчный массив по строкам

for (int z = 0; z < count_2_kvadrat; z++)

{

prom += read_matrix(razmer_2_kvadrat, b[z], '0');

}

//заполняем первые квадраты

n = 0;

for (int z = 0; z < count_1_kvadrat; z++)

{

a[z] = write_matrix(razmer_1_kvadrat, prom, '1');

}

//записываем выходной массив по строкам

for (int z = 0; z < count_1_kvadrat; z++)

{

rez += read_matrix(razmer_1_kvadrat, a[z], '1');

}

//вывод результата строки

textBox2.Clear();

textBox2.AppendText(rez.Replace('*', ' '));

}

private void button3_Click(object sender, EventArgs e)

{

textBox1.Clear();

textBox2.Clear();

textBox3.Clear();

}

private void button4_Click(object sender, EventArgs e)

{

Application.Exit();

}

}

}

Рисунок 2 – Продолжение.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]