<div class="codetitle"><b>Код:</b></div><div class="codecontent">int i;
unsigned char key[7]; //Ключ без битов четности
unsigned char Left1[4];
unsigned char Left[4];
unsigned char byte6key[6];
unsigned char right[4];
unsigned char right_extended[6];
Permute(key, i_key, KeyPermuteMap, 7);
Permute(data, NULL, InitialPermuteMap, 8);
// Шифрование выполняется в 16 раундах
for (i = 0; i < 16; i++)
{
// data[4..8] - правая часть
for (int i = 0; i < 4; i++) Left1[i] = data[i+4];
//взяли левую часть из правой
CKey::KeyShift(key, KeyRotation[i]);
Permute(byte6key, key, KeyFinalCompression, 6);
for (int i = 0; i < 4; i++) right[i] = data[i + 4];
//функция f
Permute(right_extended, right, DataExpansion, 6); //перестановка E
for (int k = 0; k < 6; ++k) right_extended[k] ^= byte6key[k]; //xor с ключом
sbox(right, right_extended); //S-box преобразование
Permute(right, NULL, PBox, 4); //P-box перестановка
//xor результата f и левой части
for (int k = 0; k < 4; ++k) right[k] ^= data[k]; //xor
for (int i = 0; i < 4; i++) data[i] = Left1[i];
for (int i = 0; i < 4; i++) data[i + 4] = right[i];
}
for (int i = 0; i < 4; i++) Left1[i] = data[i]; //скопирвали левую часть
for (int i = 0; i < 4; i++) data[i] = data[i+4]; //поменяли местами левую и правую
for (int i = 0; i < 4; i++) data[i+4] = Left1[i]; //вернули левую часть на место
CKey::Permute(data, NULL, FinalPermuteMap, 8);
}</div>