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

БФИ2203_ОИБ_Лаб№4_Вар№8

.docx
Скачиваний:
0
Добавлен:
02.08.2026
Размер:
931 Кб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций РФ ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования «МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ»

Кафедра «Информационная безопасность»

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

по дисциплине «Основы информационной безопасности»

«ЭЛЕКТРОННО-ЦИФРОВАЯ ПОДПИСЬ

И ПРИЕМЫ ХЕШИРОВАНИЯ»

Вариант № 8

Выполнили:

студенты группы БФИ №2203

Козлова Я.В.

Мячина Л.А.

Москва, 2023 г.

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

Задача: составить программу шифрования методом контрольных сумм и методом хеширования с применением гаммирования. Пусть а = 9, b = 11, с = МахVal + 1 = 256, t0 = 201. Вычислить контрольные суммы для нескольких сообщений методом контрольных сумм (KSumm) и методом хеширования с применением гаммирования (SummKodBukvOtkr):

а) Р = '021345', KSumm = ?, SummKodBukvOtkr – ?;

б) Р = '543120', KSumm = ?, SummKodBukvOtkr – ?;

в) Р = '1000999', KSumm = ?, SummKodBukvOtkr – ?;

г) Р = '1999000', KSumm = ?, SummKodBukvOtkr – ?

Ход работы:

Расчеты вручную приведены на рисунках 1-4:

Рисунок 1 – Пример а)

Рисунок 2 – Пример б)

Рисунок 3 – Пример в)

Рисунок 4 – Пример г)

Листинг программы, реализующей шифрование двумя способами:

using System;

using System.Text;

using System;

class Program

{

static void Main()

{

Console.Write("Введите строку: ");

string input = Console.ReadLine();

int P = input.Length;

int[] ascii_codes = StringToAscii(input);

int K = CalculateSum(ascii_codes);

int MaxVal = 255, A = 9, B = 11, C = 256;

int[] T = { 201 };

string[] T_binary = GetBinary(T[0]);

int KSumm;

if (K <= MaxVal)

{

KSumm = K;

}

else

{

KSumm = K % (MaxVal + 1);

}

Console.WriteLine($"KSumm = {KSumm}");

string[] binary_codes = AsciiToBinary(ascii_codes);

int[] Y = new int[P];

int T_next = T[0];

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

{

T_next = (A * T_next + B) % C;

T_binary = GetBinary(T_next);

Y[i] = CalculateXor(binary_codes[i], T_binary[0]);

}

int SummKodBukvOtkr = CalculateSum(Y) % C;

Console.WriteLine($"SummKodBukvOtkr = {SummKodBukvOtkr}");

}

static int[] StringToAscii(string input)

{

int[] ascii_codes = new int[input.Length];

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

{

ascii_codes[i] = (int)input[i];

}

return ascii_codes;

}

static int CalculateSum(int[] numbers)

{

int sum = 0;

foreach (int num in numbers)

{

sum += num;

}

return sum;

}

static string[] AsciiToBinary(int[] ascii_codes)

{

string[] binary_codes = new string[ascii_codes.Length];

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

{

binary_codes[i] = Convert.ToString(ascii_codes[i], 2);

}

return binary_codes;

}

static string[] GetBinary(int number)

{

string binary = Convert.ToString(number, 2);

return new string[] { binary };

}

static int CalculateXor(string binary1, string binary2)

{

int decimal1 = Convert.ToInt32(binary1, 2);

int decimal2 = Convert.ToInt32(binary2, 2);

int xorResult = decimal1 ^ decimal2;

return xorResult;

}

}

Результаты работы программы представлены на рисунках 5-8:

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

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

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

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

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