Защита Информации / зи лб 4
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ и НАУКИ
КЫРГЫЗСКОЙ РЕСПУБЛИКИ
КЫРГЫЗСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ им. И. РАЗЗАКОВА
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА «ИНФОРМАТИКА И ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА»
Отчет
По защите информации
Лабораторная работа 4
.
Бишкек 2019
#include<iostream>
#include<cmath>
#include<bitset>
using namespace std;
int main() {
setlocale(0, "");
string txt = "фары", SM, T, H, MM, Sd, St;
char ST[4];
int ind = 0, in = 0, P[4] = { 2, 0, 3, 1 }, PP[4] = { 1, 3, 0, 2 };
bitset<4>sd[16] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
bitset<2>st[4] = { 00,01,10,11 };
bitset<4>tab[4][16] = { { 2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9 },
{ 14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6 },
{ 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14 },
{ 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3 } };
bitset<CHAR_BIT>b[6];
bitset<1>M[48];
bitset<1>MS[32];
bitset<1>MP[32];
bitset<4>DD[10];
for (int i = 0; i < txt.length(); i++) {
b[i] = txt[i];
H = b[i].to_string();
for (size_t j = 0; j < H.length(); j++) {
M[ind] = H[j];
ind++;
}
}
//Вывод таблицы
cout << " ";
for (int i = 0; i < 16; i++) {
cout << sd[i] << " ";
}
cout << endl;
for (int i = 0; i < 4; i++) {
cout << st[i] << " ";
for (int j = 0; j < 16; j++) {
cout << tab[i][j] << " ";
}
cout << endl;
}
cout << endl;
for (int i = 0; i < 48; i++) {
cout << M[i];
}
cout << endl;
int a = 0, c = 2;
int ind1, ind2;
for (int i = 0; i < 48; i++) {
MM.append(M[i].to_string(), 0, 1);
}
for (int i = 0; i < 8; i++) {
St.append(MM, a, 2);
Sd.append(MM, c, 4);
a += 6;
c += 6;
bitset<2>ST1(St);
bitset<4>SD(Sd);
for (int i = 0; i < 4; i++) {
if (st[i] == ST1) {
ind1 = i;
}
}
for (int i = 0; i < 16; i++) {
if (sd[i] == SD) {
ind2 = i;
}
}
cout << tab[ind1][ind2];
DD[i] = tab[ind1][ind2];
Sd.erase();
St.erase();
}
cout << endl;
int n = 0, NB = 0, index = 0;
while (n < 32) {
H = DD[n].to_string();
for (size_t j = 0; j < H.length(); j++) {
MS[index] = H[j];
index++;
}
MP[n] = MS[P[n % 4] + NB * 4];
cout << MP[n];
if ((n + 1) % 4 == 0 && n != 0) NB++;
n++;
}
cout << endl;
ind = 0; in = 0;
for (int i = 0; i < 32; i++) {
SM.append(MP[i].to_string(), 0, 1);
}
int k = 0;
for (int i = 0; i < 4; i++) {
T.append(SM, k, 8);
char *c = const_cast<char *>(T.c_str());
bitset<CHAR_BIT>bin(c);
ST[i] = char(bin.to_ulong());
cout << ST[i];
T.erase();
k += 8;
}
cout << endl << endl << endl << endl;
//Расшифровка
bitset<CHAR_BIT>B[4];
ind = 0;
for (int i = 0; i < 4; i++) {
B[i] = ST[i];
H = B[i].to_string();
for (size_t j = 0; j < H.length(); j++) {
M[ind] = H[j];
cout << M[ind];
ind++;
}
}
cout << endl;
n = 0; NB = 0;
while (n < 32) {
MP[n] = M[PP[n % 4] + NB * 4];
cout << MP[n];
if ((n + 1) % 4 == 0 && n != 0) NB++;
n++;
}
cout << endl;
system("pause");
}