Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практические работы Часть 2 / Практическая работа 7 / ПР№ 7 Шифрование методом гаммирования

.docx
Скачиваний:
63
Добавлен:
24.07.2019
Размер:
79.91 Кб
Скачать

Практическая работа № 7

Шифрование данных методом гаммирования

в симметричных криптосистемах

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

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

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

Процесс расшифрования сводится к повторной генерации гаммы шифра и наложению этой гаммы на зашифрованные данные.

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

Псевдослучайная последовательность (ПСП) — последовательность чисел, которая была вычислена по некоторому определённому арифметическому правилу, но имеет все свойства случайной последовательности чисел в рамках решаемой задачи.

Задание:

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

  1. Используя алгоритм шифрования данных методом гаммирования с ПСП на основе М-последовательности, написать программу шифрования и дешифрования произвольного набора символов на любом языке программирования.

Программа:

  1. на основе линейного конгруэнтного датчика

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace pr6

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

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

char[] fraza = textBox1.Text.ToCharArray();

int A, C, n, i, j, dl_frazy, alf;

n = Convert.ToInt32(textBox2.Text);

A = Convert.ToInt32(textBox3.Text);

C = Convert.ToInt32(textBox4.Text);

dl_frazy = textBox1.Text.Length;

alf = alfavit.Length;

int[] t = new int[dl_frazy];

string shifr = "";

if (A % 4 != 1)

label8.Text = "Amod 4!=1,введите другое А!";

else

{

if (C % 2 == 0)

label8.Text = "Введите нечетное С!";

else

{

for (i = 0; i < dl_frazy; i++)

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

if (alfavit[j] == fraza[i])

{

n = (A * t[i] + C) % 32;

fraza[i] = alfavit[(j + n) % alf];

break;

}

for (i = 0; i < dl_frazy; i++)

shifr += fraza[i];

textBox5.Text = shifr;

}

}

}

private void button2_Click(object sender, EventArgs e)

{

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

char[] shifr = textBox5.Text.ToCharArray();

int A, C, n, i, j, dl_shifra, alf;

n = Convert.ToInt32(textBox2.Text);

A = Convert.ToInt32(textBox3.Text);

C = Convert.ToInt32(textBox4.Text);

dl_shifra = textBox5.Text.Length;

alf = alfavit.Length;

int[] t = new int[dl_shifra];

string deshifr = "";

for (i = 0; i < dl_shifra; i++)

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

if (alfavit[j] == shifr[i])

{

n = (A * t[i] + C) % 32;

shifr[i] = alfavit[(33 + j - n) % alf];

break;

}

for (i = 0; i < dl_shifra; i++)

deshifr += shifr[i];

textBox6.Text = deshifr;

}

}

}

Результат:

  1. на основе М-последовательности

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace pr6

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

string fraza=textBox1.Text;

int key,dl_frazy,i;

dl_frazy = fraza.Length;

key = Convert.ToInt32(textBox4.Text);

char[] sh = new char[dl_frazy];

string shifr = "";

for (i = 0; i < dl_frazy; i++)

{

sh[i] = Convert.ToChar((fraza[i] + key - 33) % 255 + 33);

key = (key >> 1) ^ ((key & 1) ^ (((key >> 3) & 1) ^ ((key >> 5) & 1)) << 6);

}

for (i = 0; i < dl_frazy; i++)

shifr += Convert.ToString(sh[i]);

textBox2.Text = shifr;

}

private void button2_Click(object sender, EventArgs e)

{

string shifr = textBox2.Text;

int key, dl_shifra, i;

dl_shifra = shifr.Length;

key = Convert.ToInt32(textBox4.Text);

char[] desh = new char[dl_shifra];

string deshifr = "";

for (i = 0; i < dl_shifra; i++)

{

desh[i] = Convert.ToChar((shifr[i] - key + 222) % 255 + 33);

key = (key >> 1) ^ ((key & 1) ^ (((key >> 3) & 1) ^ ((key >> 5) & 1)) << 6);

}

for (i = 0; i < dl_shifra; i++)

deshifr += Convert.ToString(desh[i]);

textBox3.Text = deshifr;

}

}

}

Результат выполнения программы:

Соседние файлы в папке Практическая работа 7