razr-1; j> = 0; j-)
{[j] = r% 2; = r/2;
} = 0; (int j = 0; j <2 * razr; j + +)
{(! i) r = IP [j] - 1; r = IP_1 [j] - 1; = (s + Massiv [r]) * 10;
} <
} GEN_kluch (int i)// фунція генерації ключів
{k_1, k_2, r; * k = new int [10]; (int j = 0; j <10; j + +)// перестановка РК_10
{= PK_10 [j] - 1; [j] = K [r];
} _1 = 0; k_2 = 0; (int j = 0; j <5; j + +)// віділення лівої
{= PK_10 [j] - 1; _1 = (k_1 + k [r]) * 10;
} (int j = 0; j <5; j + +)// та правої частин ключа
{= PK_10 [5 + j] - 1; _2 = (k_2 + k [r]) * 10;
} (! i)
{_1 <<1; k_2 <<1;
}
{_1>> 1; k_2>> 1;
} (int j = 4; j> = 0; j-)
{[j] = k_1% 2; _1 = k_1/2;
} (int j = 4; j> = 0; j-)
{[j +5] = k_2% 2; _2 = k_2/2;
} (int j = 0; j <8; j + +)// перестановка РК_8
{= PK_8 [j] - 1; [j] = k [r];
} [] k; 0;
} XOR (int a, int b)// функція побітного ХОR
{r, x, y, razr; = 0; x = a; y = b; razr = 1; (x | | y)
{= r + (x% 2 ^ y% 2) * razr; = x/10; = y/10; * = 10;
} r;
} main ()
{a, a_l, a_r, i, j, r; = 10010111; <<В«Vidkrute chislo:В« <
{_l = a/10000; _r = a% 10000; = GEN_kluch (i);// генерація i-го ключа_l = Ob_1.F (a_l);// виклик раундової Функції = a_r * 10000 + XOR (a_l, a_r); <
} = Ob_1.IP (a, 1);// виклик Функції підстановкі IР_1 <
}
Результат роботи програми: chislo: 10010111_0: 01011101: vhid: 0101: vuhid: 1110
-uj raynd: 11010011: vhid: 1101: vuhid: 1100
-uj raynd: 001111111_1: 10111011chislo: 10111011
2.3.4 Розшифрування Зашифрування тексту
Як видно з рис. 2.1, розшифрування Зашифрування тексту віконується аналогічно шифрування, за вінятком того, что ключі подаються у зворотнього порядку. p align="justify"> Результат роботи програми:
chislo: 10111011_0: 00111111: vhid: 0011: vuhid: 1010
-uj raynd: 11110101: vhid: 1111: vuhid: 1000
-uj raynd: 01011101_1: 10010111chislo: 10010111
2.4 Кріптоаналіз блокової шіфрів
<...