Вы находитесь на странице: 1из 5

Министерство Образования и Науки Кыргызской Республики

Кыргызский Государственный Технический Университет


Факультет информационных технологий
Кафедра:”Информатики и вычислительной техники”

Отчет
Лабораторная работа
Тема: DES алгоритм

Выполнила: Чилетирова Мээрим


Группа: ИВТ-1-19
Проверила: Шаршеева К.Т.

Бишкек 2021
#include <iostream>
#include <cmath>

using namespace std;

int main() {
setlocale(LC_ALL, "RUS");

const int T[64] =


{ 0,1,1,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,0,1,0,1,1,0,0,1,1,0,1,0,1,1,1,0,0,1,1,0,1,0,1,0,1,0,1,
1,0,1,0,1,1,1,0,0,1,0,0,0,1,1,1,1,0,1 };
const int IP[64] =
{ 25,35,46,23,14,15,5,3,61,11,24,17,35,13,14,9,16,59,36,47,51,29,47,55,63,46,47,16,32,22,15,
17,54,44,42,31,19,17,8,20,58,50,42,34,26,18,10,5,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14
,6 };
const int IP1[64] =
{ 54,60,44,55,8,33,53,32,33,61,56,14,14,26,46,34,37,57,29,13,43,21,51,39,46,4,44,2,5,27,50,2
0,15,3,49,14,31,18,58,17,24,52,32,10,40,11,28,13,14,1,51,19,41,42,47,45,35,0,26,48,51,5,3,4
};
const int P[32] =
{ 15,06,19,20,28,11,27,16,0,14,22,25,4,17,30,9,1,7,23,13,31,26,2,8,18,12,29,5,21,10,3,24 };
int LP[32];
int TIP1[65], TIP[65];
int T1[65];
int L[32], R[32];
int Li[32];
int k = 1;

cout << "Исходная Матрица " << endl; //вывод исходной матрици
for (int i = 0; i < 64; i++)
{
cout << T[i] << " ";
if (k % 8 == 0) cout << endl;
k++;
}

k = 1;
cout << endl;

//перестановка происходит ==> оброзом:


//в матрицу TIP[i] записываются данные матрици T[64] в последовательности IP[i]
занесеные ранее

cout << "перестановка исходной матрици в IP" << endl;


for (int i = 0; i < 64; i++)
TIP[i] = T[IP[i]];
for (int i = 0; i < 64; i++)
{
cout << TIP[i] << " ";
if (k % 8 == 0) cout << endl;
k++;
}

k = 1;
cout << endl;
// в матрицу L[32] записываются первые 32 значения матрици ITP
// которую мы получили на прошлом шаге

cout << "Матрица L" << endl;


for (int i = 0; i < 32; i++)
{
L[i] = TIP[i];
cout << L[i] << " ";
if (k % 8 == 0) cout << endl;
k++;
}

k = 1;
cout << endl;

// в матрицу R[32] записываются остальные 32 значения матрици ITP


// начиная со значения 32
cout << "Матрица R" << endl;
for (int i = 0; i < 32; i++)
{
int j = 32;
R[i] = TIP[j + i];
cout << R[i] << " ";
if (k % 8 == 0) cout << endl;
k++;
}
k = 1;
cout << endl;

// перестановка в P блоке происходит точно также как и IP


cout << "Перестановка L в P блоке" << endl;
for (int i = 0; i < 32; i++)
LP[i] = L[P[i]];
for (int i = 0; i < 32; i++)
{
cout << LP[i] << " ";
if (k % 8 == 0) cout << endl;
k++;
}

k = 1;
cout << endl;

// Новая матрица T1[64] это соединеные воедино левая и правая чаcть L и R


// сначала записываются значения матрици L а после значения матрици R
cout << "Новая матрица T -> T1" << endl;
int q = 0;
for (int i = 0; i <= 64; i++)
{
T1[i] = LP[i];
if (i > 31)
{
T1[i] = R[q];
q++;
}
}
for (int i = 0; i < 64; i++)
{
cout << T1[i] << " ";
if (k % 8 == 0) cout << endl;
k++;
}

k = 1;
cout << endl;

// перестановка в IP^-1 блоке точно таккая же как и IP и P блоки


cout << "Перестановка новой матрици в IP^-1 блоке" << endl;
for (int i = 0; i < 64; i++)
TIP1[i] = T1[IP1[i]];
for (int i = 0; i < 64; i++)
{
cout << TIP1[i] << " ";
if (k % 8 == 0) cout << endl;
k++;
}

system("pause>>void");
}

Вам также может понравиться