БФИ2203_ОИБ_Лаб№4_Вар№8
.docxМинистерство цифрового развития, связи и массовых коммуникаций РФ ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования «МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ»
Кафедра «Информационная безопасность»
Отчет по лабораторной работе № 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 – Результат работы программы г)
Вывод: в результате выполнения работы мы овладели практическими навыками закрытия информации электронно-цифровой подписью и приемами хеширования, рассмотрели хеширования методом контрольных сумм и методом наложения кодов — гаммированием.
