OIB4
.docxФедеральное агентство связи
Ордена Трудового Красного Знамени федеральное государственное
бюджетное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра «Математической кибернетики и информационных технологий»
Лабораторная работа №6
«Электронно-цифровая подпись и приемы хеширования»
Выполнили
Проверила:
Магомедова Д. И.
Москва, 2020 г.
Оглавление
1. Цель работы: 3
2. Ход работы: 3
Пусть а = 17, b = 11, с = МахVal + 1 = 256, t0 = 172. 3
Вычислить контрольные суммы для нескольких сообщений методом контрольных сумм (KSumm) и методом хеширования с применением гаммирования (SummKodBukvOtkr): 3
а) Р = '0123456789', KSumm = ?, SummKodBukvOtkr – ?; 3
б) Р = '9876543210', KSumm = ?, SummKodBukvOtkr – ?; 3
в) Р = '1000005', KSumm = ?, SummKodBukvOtkr – ?; 3
г) Р = '1500000', KSumm = ?, SummKodBukvOtkr – ? 3
4.Код программы 3
5.Результат работы программы 7
1. Цель работы:
Овладеть практическими навыками закрытия информации электронно-цифровой подписью и приемами хеширования, рассмотрение хеширования методом контрольных сумм и методом наложения кодов — гаммированием.
2. Ход работы:
Ознакомиться с теоретической частью данной работы.
Составить программу шифрования методом контрольных сумм.
Составить программу шифрования методом хеширования с применением гаммирования.
Составить отчет по проделанной работе.
Защитить работу.
3. Постановка задачи:
Составить программу шифрования методом контрольных сумм и методом хеширования с применением гаммирования;
Реализовать программу;
Задание для варианта №1
Пусть а = 17, b = 11, с = МахVal + 1 = 256, t0 = 172.
Вычислить контрольные суммы для нескольких сообщений методом контрольных сумм (KSumm) и методом хеширования с применением гаммирования (SummKodBukvOtkr):
а) Р = '0123456789', KSumm = ?, SummKodBukvOtkr – ?;
б) Р = '9876543210', KSumm = ?, SummKodBukvOtkr – ?;
в) Р = '1000005', KSumm = ?, SummKodBukvOtkr – ?;
г) Р = '1500000', KSumm = ?, SummKodBukvOtkr – ?
4.Код программы
private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
double a = SomeProjectDLL::Class1::Vvod(textBox2);
double b = SomeProjectDLL::Class1::Vvod(textBox3);
double c = SomeProjectDLL::Class1::Vvod(textBox4);
double t = SomeProjectDLL::Class1::Vvod(textBox5);
String^ s = textBox1->Text;
string myString = marshal_as<string>(s);
double MaxVal = c - 1;
int Ksumm = 0;
int f = (int)c;
for (int i = 0; i < myString.length(); i++)
{
Ksumm += (char)myString[i];
}
if (Ksumm > MaxVal) {
Ksumm = Ksumm % f;
}
textBox6->Text = Convert::ToString(Ksumm);
int i = 1;
if (myString.size() == 10) {
int buf[7];//dvoich
int bufS[7];//dlya T
int bufSS[7];//dlya dboich T
int bufSS1[7];//dlya dboich
int rez[7];
int rezfinal[7] = {14,14,14,14,14,14,14};
bufS[0] = t;
for (int d = 1; d < 8; d++)
{
bufS[d] = ((int)a * bufS[d-1] + (int)b) % (int)c;
}
for (int g = 0; g < 10; g++)
{
int t = 0;
int buk = myString[g];
while (bufS[g] > 1)
{
bufSS[t] = bufS[g] % 2;
bufS[g] /= 2;
t++;
}
t = 0;
while (buk > 1)
{
bufSS[t] = buk % 2;
buk /= 2;
t++;
}
if (rezfinal[0] == 14) {
t = 0;
while (t != 7)
{
rezfinal[t] = (bufSS[t] + bufSS1[t]) % 2;
t++;
}
}
else {
t = 0;
while (t != 7)
{
rez[t] = (bufSS[t] + bufSS1[t]) % 2;
t++;
}
t = 0;
while (t != 7)
{
rezfinal[t] = (rez[t] + rezfinal[t]) % 2;
t++;
}
}
}
int t = 6;
double o = 0;
int hsh = 0;
while (t >=0)
{
hsh += rezfinal[t] * pow(2, o);
o++;
t--;
}
textBox7->Text = Convert::ToString(hsh);
}
if (myString.size() == 7) {
int buf[6];//dvoich
int bufS[6];//dlya T
int bufSS[6];//dlya dboich T
int bufSS1[6];//dlya dboich
int rez[6];
int rezfinal[6] = { 14,14,14,14,14,14 };
bufS[0] = t;
for (int d = 1; d < 7; d++)
{
bufS[d] = ((int)a * bufS[d - 1] + (int)b) % (int)c;
}
for (int g = 0; g < 6; g++)
{
int t = 0;
int buk = myString[g];
while (bufS[g] > 1)
{
bufSS[t] = bufS[g] % 2;
bufS[g] /= 2;
t++;
}
t = 0;
while (buk > 1)
{
bufSS[t] = buk % 2;
buk /= 2;
t++;
}
if (rezfinal[0] == 14) {
t = 0;
while (t != 7)
{
rezfinal[t] = (bufSS[t] + bufSS1[t]) % 2;
t++;
}
}
else {
t = 0;
while (t != 6)
{
rez[t] = (bufSS[t] + bufSS1[t]) % 2;
t++;
}
t = 0;
while (t != 6)
{
rezfinal[t] = (rez[t] + rezfinal[t]) % 2;
t++;
}
}
}
int t = 5;
double o = 0;
int hsh = 0;
while (t >= 0)
{
hsh += rezfinal[t] * pow(2, o);
o++;
t--;
}
textBox7->Text = Convert::ToString(hsh);
}
}
5.Результат работы программы
На рисунке 1 показана реализация программы шифрования методом контрольных сумм и методом хеширования с применением гаммирования.
Рисунок 1 – Результат работы программы