Разработка криптографической программы (стандарт DES)

Разработка программы, реализующей процедуры шифрования и расшифрования текста по стандарту DES (Data Encryption Standard). Структура алгоритма шифрования, схема выработки ключевых элементов. Использование криптографического программного средства.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 15.06.2013
Размер файла 1,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

EEE();

}

if (radioButton6.Checked == true)

{

EDE2 = true;

EDE();

}

}

private void button2_Click(object sender, EventArgs e)

{

listBox1.Items.Clear();

textBox5.Clear();

Shifr = false;

kluch = false;

vector = false;

EEE3 = false;

EEE2 = false;

EDE3 = false;

EDE2 = false;

if (radioButton1.Checked == true)

{

ECB();

}

if (radioButton2.Checked == true)

{

CBC();

}

if (radioButton3.Checked == true)

{

EEE3 = true;

EEE();

}

if (radioButton4.Checked == true)

{

EDE3 = true;

EDE();

}

if (radioButton5.Checked == true)

{

EEE2 = true;

EEE();

}

if (radioButton6.Checked == true)

{

EDE2 = true;

EDE();

}

}

//функция шифрования/дешифрования

public void FUNKCIY()

{

listBox1.Items.Add(" ");

if (Shifr == true)

{

listBox1.Items.Add("---------------------------ШИФРОВАНИЕ--------------------------- ");

}

else

{

listBox1.Items.Add("---------------------------ДЕШИФРОВАНИЕ--------------------------- ");

}

for (int counttt = 0; counttt < btTransp.Length; counttt++)

{

listBox1.Items.Add(" ");

listBox1.Items.Add((counttt + 1) + "й блок: ");

if ((counttt == 0) || (vector == false))

{

H0[0] = HPart[counttt];

L0[0] = LPart[counttt];

}

//для CBC

else

{

if (Shifr == true)

{

for (int s = 0; s < btTransp.Length; s++)

{

for (int d = 0; d < 32; d++)

{

HPart[s][d] = btTransp[s][d];

LPart[s][d] = btTransp[s][d + 32];

}

}

H0[0] = HPart[counttt];

L0[0] = LPart[counttt];

}

else

{

H0[0] = HPart[counttt];

L0[0] = LPart[counttt];

}

}

for (int i = 1; i < 17; i++)

{

listBox1.Items.Add(" ");

listBox1.Items.Add(i + "я итерация: ");

//в 48 бит

for(int cv=0; cv< 48; cv++)

{

L1[i - 1][cv] = L0[i-1][E[cv] - 1];

}

//проверка

listBox1.Items.Add("блок L" + (i - 1) + " в 48 бит: ");

bufff = "";

for (int bn = 0; bn < 48; bn++)

{

if ((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31) || (bn == 39) || (bn == 47))

{

bufff += (L1[i - 1][bn] ? 1: 0).ToString();

bufff += " ";

}

else

{

bufff += (L1[i - 1][bn] ? 1: 0).ToString();

}

}

listBox1.Items.Add(bufff);

bufff = "";

listBox1.Items.Add("блок L" + (i - 1) + " в 48 бит: ");

for (int n = 0; n < 48; n++)

{

if ((n == 7) || (n == 15) || (n == 23) || (n == 31) || (n == 39) || (n == 47))

{

bufff += (KLUCHI[i - 1][n] ? 1: 0).ToString();

bufff += " ";

}

else

{

bufff += (KLUCHI[i - 1][n] ? 1: 0).ToString();

}

}

listBox1.Items.Add(bufff);

bufff = "";

//XOR

if (Shifr == true)

{

L1[i - 1].Xor(KLUCHI[i - 1]);

}

else

{

L1[i - 1].Xor(KLUCHI[17-i - 1]);

}

listBox1.Items.Add("Результат XOR L(" + (i - 1) + ") и " + i + "го ключевого элемента ");

for (int bn = 0; bn < 48; bn++)

{

if ((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31) || (bn == 39) || (bn == 47))

{

bufff += (L1[i - 1][bn] ? 1: 0).ToString();

bufff += " ";

}

else

{

bufff += (L1[i - 1][bn] ? 1: 0).ToString();

}

}

listBox1.Items.Add(bufff);

bufff = "";

for (int t = 0; t < 6; t++)

{

HHH[0][t] = L1[i - 1][t];

HHH[1][t] = L1[i - 1][t+6];

HHH[2][t] = L1[i - 1][t+12];

HHH[3][t] = L1[i - 1][t+18];

HHH[4][t] = L1[i - 1][t+24];

HHH[5][t] = L1[i - 1][t+30];

HHH[6][t] = L1[i - 1][t+36];

HHH[7][t] = L1[i - 1][t+42];

}

//выводим на экран

for (int t = 0; t < 8; t++)

{

listBox1.Items.Add((t + 1) + "й " + "H элемент ");

for (int z = 0; z < 6; z++)

{

bufff += (HHH[t][z] ? 1: 0).ToString();

}

listBox1.Items.Add(bufff);

bufff = "";

}

//задаем b1b6 и b2b3b4b5

for (int t = 0; t < 8; t++)

{

b1b6[t][0] = HHH[t][0];

b1b6[t][1] = HHH[t][5];

b2b3b4b5[t][0] = HHH[t][1];

b2b3b4b5[t][1] = HHH[t][2];

b2b3b4b5[t][2] = HHH[t][3];

b2b3b4b5[t][3] = HHH[t][4];

}

//переводим в число

for (int t = 0; t < 8; t++)

{

if ((b1b6[t][0] == false) && (b1b6[t][1] == false))

{

NStr[t] = 0;

}

if ((b1b6[t][0] == false) && (b1b6[t][1] == true))

{

NStr[t] = 1;

}

if ((b1b6[t][0] == true) && (b1b6[t][1] == false))

{

NStr[t] = 2;

}

if ((b1b6[t][0] == true) && (b1b6[t][1] == true))

{

NStr[t] = 3;

}

if ((b2b3b4b5[t][0] == false) && (b2b3b4b5[t][1] == false) && (b2b3b4b5[t][2] == false) && (b2b3b4b5[t][3] == false))

{

NStolb[t] = 0;

}

if ((b2b3b4b5[t][0] == false) && (b2b3b4b5[t][1] == false) && (b2b3b4b5[t][2] == false) && (b2b3b4b5[t][3] == true))

{

NStolb[t] = 1;

}

if ((b2b3b4b5[t][0] == false) && (b2b3b4b5[t][1] == false) && (b2b3b4b5[t][2] == true) && (b2b3b4b5[t][3] == false))

{

NStolb[t] = 2;

}

if ((b2b3b4b5[t][0] == false) && (b2b3b4b5[t][1] == false) && (b2b3b4b5[t][2] == true) && (b2b3b4b5[t][3] == true))

{

NStolb[t] = 3;

}

if ((b2b3b4b5[t][0] == false) && (b2b3b4b5[t][1] == true) && (b2b3b4b5[t][2] == false) && (b2b3b4b5[t][3] == false))

{

NStolb[t] = 4;

}

if ((b2b3b4b5[t][0] == false) && (b2b3b4b5[t][1] == true) && (b2b3b4b5[t][2] == false) && (b2b3b4b5[t][3] == true))

{

NStolb[t] = 5;

}

if ((b2b3b4b5[t][0] == false) && (b2b3b4b5[t][1] == true) && (b2b3b4b5[t][2] == true) && (b2b3b4b5[t][3] == false))

{

NStolb[t] = 6;

}

if ((b2b3b4b5[t][0] == false) && (b2b3b4b5[t][1] == true) && (b2b3b4b5[t][2] == true) && (b2b3b4b5[t][3] == true))

{

NStolb[t] = 7;

}

if ((b2b3b4b5[t][0] == true) && (b2b3b4b5[t][1] == false) && (b2b3b4b5[t][2] == false) && (b2b3b4b5[t][3] == false))

{

NStolb[t] = 8;

}

if ((b2b3b4b5[t][0] == true) && (b2b3b4b5[t][1] == false) && (b2b3b4b5[t][2] == false) && (b2b3b4b5[t][3] == true))

{

NStolb[t] = 9;

}

if ((b2b3b4b5[t][0] == true) && (b2b3b4b5[t][1] == false) && (b2b3b4b5[t][2] == true) && (b2b3b4b5[t][3] == false))

{

NStolb[t] = 10;

}

if ((b2b3b4b5[t][0] == true) && (b2b3b4b5[t][1] == false) && (b2b3b4b5[t][2] == true) && (b2b3b4b5[t][3] == true))

{

NStolb[t] = 11;

}

if ((b2b3b4b5[t][0] == true) && (b2b3b4b5[t][1] == true) && (b2b3b4b5[t][2] == false) && (b2b3b4b5[t][3] == false))

{

NStolb[t] = 12;

}

if ((b2b3b4b5[t][0] == true) && (b2b3b4b5[t][1] == true) && (b2b3b4b5[t][2] == false) && (b2b3b4b5[t][3] == true))

{

NStolb[t] = 13;

}

if ((b2b3b4b5[t][0] == true) && (b2b3b4b5[t][1] == true) && (b2b3b4b5[t][2] == true) && (b2b3b4b5[t][3] == false))

{

NStolb[t] = 14;

}

if ((b2b3b4b5[t][0] == true) && (b2b3b4b5[t][1] == true) && (b2b3b4b5[t][2] == true) && (b2b3b4b5[t][3] == true))

{

NStolb[t] = 15;

}

}

//узнаем узел замены

for (int t = 0; t < 8; t++)

{

if (t == 0)

{

if (NStr[t] == 0)

{

UzelZam[i-1,t]=S10[NStolb[t]];

}

if (NStr[t] == 1)

{

UzelZam[i - 1, t] = S11[NStolb[t]];

}

if (NStr[t] == 2)

{

UzelZam[i - 1, t] = S12[NStolb[t]];

}

if (NStr[t] == 3)

{

UzelZam[i - 1, t] = S13[NStolb[t]];

}

}

if (t == 1)

{

if (NStr[t] == 0)

{

UzelZam[i - 1, t] = S20[NStolb[t]];

}

if (NStr[t] == 1)

{

UzelZam[i - 1, t] = S21[NStolb[t]];

}

if (NStr[t] == 2)

{

UzelZam[i - 1, t] = S22[NStolb[t]];

}

if (NStr[t] == 3)

{

UzelZam[i - 1, t] = S23[NStolb[t]];

}

}

if (t == 2)

{

if (NStr[t] == 0)

{

UzelZam[i - 1, t] = S30[NStolb[t]];

}

if (NStr[t] == 1)

{

UzelZam[i - 1, t] = S31[NStolb[t]];

}

if (NStr[t] == 2)

{

UzelZam[i - 1, t] = S32[NStolb[t]];

}

if (NStr[t] == 3)

{

UzelZam[i - 1, t] = S33[NStolb[t]];

}

}

if (t == 3)

{

if (NStr[t] == 0)

{

UzelZam[i - 1, t] = S40[NStolb[t]];

}

if (NStr[t] == 1)

{

UzelZam[i - 1, t] = S41[NStolb[t]];

}

if (NStr[t] == 2)

{

UzelZam[i - 1, t] = S42[NStolb[t]];

}

if (NStr[t] == 3)

{

UzelZam[i - 1, t] = S43[NStolb[t]];

}

}

if (t == 4)

{

if (NStr[t] == 0)

{

UzelZam[i - 1, t] = S50[NStolb[t]];

}

if (NStr[t] == 1)

{

UzelZam[i - 1, t] = S51[NStolb[t]];

}

if (NStr[t] == 2)

{

UzelZam[i - 1, t] = S52[NStolb[t]];

}

if (NStr[t] == 3)

{

UzelZam[i - 1, t] = S53[NStolb[t]];

}

}

if (t == 5)

{

if (NStr[t] == 0)

{

UzelZam[i - 1, t] = S60[NStolb[t]];

}

if (NStr[t] == 1)

{

UzelZam[i - 1, t] = S61[NStolb[t]];

}

if (NStr[t] == 2)

{

UzelZam[i - 1, t] = S62[NStolb[t]];

}

if (NStr[t] == 3)

{

UzelZam[i - 1, t] = S63[NStolb[t]];

}

}

if (t == 6)

{

if (NStr[t] == 0)

{

UzelZam[i - 1, t] = S70[NStolb[t]];

}

if (NStr[t] == 1)

{

UzelZam[i - 1, t] = S71[NStolb[t]];

}

if (NStr[t] == 2)

{

UzelZam[i - 1, t] = S72[NStolb[t]];

}

if (NStr[t] == 3)

{

UzelZam[i - 1, t] = S73[NStolb[t]];

}

}

if (t == 7)

{

if (NStr[t] == 0)

{

UzelZam[i - 1, t] = S80[NStolb[t]];

}

if (NStr[t] == 1)

{

UzelZam[i - 1, t] = S81[NStolb[t]];

}

if (NStr[t] == 2)

{

UzelZam[i - 1, t] = S82[NStolb[t]];

}

if (NStr[t] == 3)

{

UzelZam[i - 1, t] = S83[NStolb[t]];

}

}

}

//переводим в биты

for (int t = 0; t < 8; t++)

{

if (UzelZam[i - 1, t] == 0)

{

TTT[t][0] = false;

TTT[t][1] = false;

TTT[t][2] = false;

TTT[t][3] = false;

}

if (UzelZam[i - 1, t] == 1)

{

TTT[t][0] = false;

TTT[t][1] = false;

TTT[t][2] = false;

TTT[t][3] = true;

}

if (UzelZam[i - 1, t] == 2)

{

TTT[t][0] = false;

TTT[t][1] = false;

TTT[t][2] = true;

TTT[t][3] = false;

}

if (UzelZam[i - 1, t] == 3)

{

TTT[t][0] = false;

TTT[t][1] = false;

TTT[t][2] = true;

TTT[t][3] = true;

}

if (UzelZam[i - 1, t] == 4)

{

TTT[t][0] = false;

TTT[t][1] = true;

TTT[t][2] = false;

TTT[t][3] = false;

}

if (UzelZam[i - 1, t] == 5)

{

TTT[t][0] = false;

TTT[t][1] = true;

TTT[t][2] = false;

TTT[t][3] = true;

}

if (UzelZam[i - 1, t] == 6)

{

TTT[t][0] = false;

TTT[t][1] = true;

TTT[t][2] = true;

TTT[t][3] = false;

}

if (UzelZam[i - 1, t] == 7)

{

TTT[t][0] = false;

TTT[t][1] = true;

TTT[t][2] = true;

TTT[t][3] = true;

}

if (UzelZam[i - 1, t] == 8)

{

TTT[t][0] = true;

TTT[t][1] = false;

TTT[t][2] = false;

TTT[t][3] = false;

}

if (UzelZam[i - 1, t] == 9)

{

TTT[t][0] = true;

TTT[t][1] = false;

TTT[t][2] = false;

TTT[t][3] = true;

}

if (UzelZam[i - 1, t] == 10)

{

TTT[t][0] = true;

TTT[t][1] = false;

TTT[t][2] = true;

TTT[t][3] = false;

}

if (UzelZam[i - 1, t] == 11)

{

TTT[t][0] = true;

TTT[t][1] = false;

TTT[t][2] = true;

TTT[t][3] = true;

}

if (UzelZam[i - 1, t] == 12)

{

TTT[t][0] = true;

TTT[t][1] = true;

TTT[t][2] = false;

TTT[t][3] = false;

}

if (UzelZam[i - 1, t] == 13)

{

TTT[t][0] = true;

TTT[t][1] = true;

TTT[t][2] = false;

TTT[t][3] = true;

}

if (UzelZam[i - 1, t] == 14)

{

TTT[t][0] = true;

TTT[t][1] = true;

TTT[t][2] = true;

TTT[t][3] = false;

}

if (UzelZam[i - 1, t] == 15)

{

TTT[t][0] = true;

TTT[t][1] = true;

TTT[t][2] = true;

TTT[t][3] = true;

}

}

//вывод на экран

for (int t = 0; t < 8; t++)

{

listBox1.Items.Add("Узел замены S" + (t + 1) + " = " + (UzelZam[i - 1, t]));

listBox1.Items.Add("В битах: ");

for (int e = 0; e < 4; e++)

{

bufff += (TTT[t][e] ? 1: 0).ToString();

}

listBox1.Items.Add(bufff);

bufff = "";

}

//восстанавливаем

for (int t = 0; t < 8; t++)

{

if (t == 0)

{

HShtrih[0] = TTT[0][0];

HShtrih[1] = TTT[0][1];

HShtrih[2] = TTT[0][2];

HShtrih[3] = TTT[0][3];

}

if (t == 1)

{

HShtrih[4] = TTT[1][0];

HShtrih[5] = TTT[1][1];

HShtrih[6] = TTT[1][2];

HShtrih[7] = TTT[1][3];

}

if (t == 2)

{

HShtrih[8] = TTT[2][0];

HShtrih[9] = TTT[2][1];

HShtrih[10] = TTT[2][2];

HShtrih[11] = TTT[2][3];

}

if (t == 3)

{

HShtrih[12] = TTT[3][0];

HShtrih[13] = TTT[3][1];

HShtrih[14] = TTT[3][2];

HShtrih[15] = TTT[3][3];

}

if (t == 4)

{

HShtrih[16] = TTT[4][0];

HShtrih[17] = TTT[4][1];

HShtrih[18] = TTT[4][2];

HShtrih[19] = TTT[4][3];

}

if (t == 5)

{

HShtrih[20] = TTT[5][0];

HShtrih[21] = TTT[5][1];

HShtrih[22] = TTT[5][2];

HShtrih[23] = TTT[5][3];

}

if (t == 6)

{

HShtrih[24] = TTT[6][0];

HShtrih[25] = TTT[6][1];

HShtrih[26] = TTT[6][2];

HShtrih[27] = TTT[6][3];

}

if (t == 7)

{

HShtrih[28] = TTT[7][0];

HShtrih[29] = TTT[7][1];

HShtrih[30] = TTT[7][2];

HShtrih[31] = TTT[7][3];

}

}

//выводим

listBox1.Items.Add("Объединенные 8 элементов:");

for (int t = 0; t < 32; t++)

{

if ((t == 7) || (t == 15) || (t == 23) || (t == 31))

{

bufff += (HShtrih[t] ? 1: 0).ToString();

bufff += " ";

}

else

{

bufff += (HShtrih[t] ? 1: 0).ToString();

}

}

listBox1.Items.Add(bufff);

bufff = "";

//переставляем P

for (int h = 0; h < 32; h++)

{

Funk[h] = HShtrih[P[h] - 1];

}

//выводим

listBox1.Items.Add("Перестановка P:");

for (int t = 0; t < 32; t++)

{

if ((t == 7) || (t == 15) || (t == 23) || (t == 31))

{

bufff += (Funk[t] ? 1: 0).ToString();

bufff += " ";

}

else

{

bufff += (Funk[t] ? 1: 0).ToString();

}

}

listBox1.Items.Add(bufff);

bufff = "";

if (i!= 16)

{

H0[i] = L0[i - 1];

L0[i]=H0[i-1].Xor(Funk);

//выводим

listBox1.Items.Add("Часть H" + i + " после итерации:");

for (int bn = 0; bn < 32; bn++)

{

if ((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31))

{

bufff += (H0[i][bn] ? 1: 0).ToString();

bufff += " ";

}

else

{

bufff += (H0[i][bn] ? 1: 0).ToString();

}

}

listBox1.Items.Add(bufff);

bufff = "";

listBox1.Items.Add("Часть L" + i + " после итерации:");

for (int bn = 0; bn < 32; bn++)

{

if ((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31))

{

bufff += (L0[i][bn] ? 1: 0).ToString();

bufff += " ";

}

else

{

bufff += (L0[i][bn] ? 1: 0).ToString();

}

}

listBox1.Items.Add(bufff);

bufff = "";

}

//последняя итерация

else

{

L0[i] = L0[i - 1];

H0[i] = H0[i - 1].Xor(Funk);

//выводим

listBox1.Items.Add("Часть L" + i + " после итерации:");

for (int bn = 0; bn < 32; bn++)

{

if ((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31))

{

bufff += (L0[i][bn] ? 1: 0).ToString();

bufff += " ";

}

else

{

bufff += (L0[i][bn] ? 1: 0).ToString();

}

}

listBox1.Items.Add(bufff);

bufff = "";

listBox1.Items.Add("Часть H" + i + " после итерации:");

for (int bn = 0; bn < 32; bn++)

{

if ((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31))

{

bufff += (H0[i][bn] ? 1: 0).ToString();

bufff += " ";

}

else

{

bufff += (H0[i][bn] ? 1: 0).ToString();

}

}

listBox1.Items.Add(bufff);

bufff = "";

//соединяем

for (int t = 0; t < 32; t++)

{

ItogPredv[counttt][t] = H0[i][t];

ItogPredv[counttt][t+32] = L0[i][t];

}

if (vector == true)

{

if (Shifr == true)

{

if (btTransp.Length!= 1)

{

if (counttt!= 0)

{

btTransp[counttt].Xor(ItogPredv[counttt - 1]);

}

}

}

if (Shifr == false)

{

CBCItog = new BitArray[btTransp.Length];

for (int a = 0; a < btTransp.Length; a++)

{

CBCItog[a] = new BitArray(64);

}

if (counttt == 0)

{

CBCItog[0] = ItogPredv[counttt];

ItogPredv[counttt].Xor(Vekt);

}

else

{

CBCItog[counttt] = ItogPredv[counttt];

ItogPredv[counttt].Xor(CBCItog[counttt - 1]);

}

}

}

//выводим

listBox1.Items.Add("Собранный блок 64 бит:");

for (int bn = 0; bn < 64; bn++)

{

if ((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31) || (bn == 39) || (bn == 47) || (bn == 55))

{

bufff += (ItogPredv[counttt][bn] ? 1: 0).ToString();

bufff += " ";

}

else

{

bufff += (ItogPredv[counttt][bn] ? 1: 0).ToString();

}

}

listBox1.Items.Add(bufff);

bufff = "";

//транспонируем IP-1

for (int h = 0; h < 64; h++)

{

Itog[counttt][h] = ItogPredv[counttt][IP1[h] - 1];

}

//выводим

listBox1.Items.Add("Транспонированный IP-1 блок 64 бит:");

for (int bn = 0; bn < 64; bn++)

{

if ((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31) || (bn == 39) || (bn == 47) || (bn == 55))

{

bufff += (Itog[counttt][bn] ? 1: 0).ToString();

bufff += " ";

}

else

{

bufff += (Itog[counttt][bn] ? 1: 0).ToString();

}

}

listBox1.Items.Add(bufff);

bufff = "";

//переворачиваем каждые 8 бит

for (int t = 0; t < 8; t++)

{

ItogPredv[counttt][t] = Itog[counttt][7-t];

ItogPredv[counttt][t+8] = Itog[counttt][15 - t];

ItogPredv[counttt][t+16] = Itog[counttt][23 - t];

ItogPredv[counttt][t+24] = Itog[counttt][31 - t];

ItogPredv[counttt][t+32] = Itog[counttt][39 - t];

ItogPredv[counttt][t+40] = Itog[counttt][47 - t];

ItogPredv[counttt][t+48] = Itog[counttt][55 - t];

ItogPredv[counttt][t+56] = Itog[counttt][63 - t];

}

//выводим

listBox1.Items.Add("Перевернутый блок 64 бит (из-за BitArray C#):");

for (int bn = 0; bn < 64; bn++)

{

if ((bn == 7) || (bn == 15) || (bn == 23) || (bn == 31) || (bn == 39) || (bn == 47) || (bn == 55))

{

bufff += (ItogPredv[counttt][bn] ? 1: 0).ToString();

bufff += " ";

}

else

{

bufff += (ItogPredv[counttt][bn] ? 1: 0).ToString();

}

}

listBox1.Items.Add(bufff);

bufff = "";

//в привычную письменность

if (Shifr == true)

{

textBox3.Text += BitArrayToStr(ItogPredv[counttt]);

}

else

{

textBox5.Text += BitArrayToStr(ItogPredv[counttt]);

}

}

}

}

}

//из bitarray в string)

static String BitArrayToStr(BitArray ba)

{

byte[] strArr = new byte[ba.Length / 8];

System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();

for (int i = 0; i < ba.Length / 8; i++)

{

for (int index = i * 8, m = 1; index < i * 8 + 8; index++, m *= 2)

{

strArr[i] += ba.Get(index) ? (byte)m: (byte)0;

}

}

return Encoding.Default.GetString(strArr);

}

//выработка ключевых элементов

public void KEYS()

{

kluchC0=new BitArray(28);

kluchD0 = new BitArray(28);

kluchC1 = new BitArray(28);

kluchD1 = new BitArray(28);

KLUCHI = new BitArray[16];

KLUCHIPREDVORITELNII = new BitArray[16];

btKluch1 = new BitArray(56);

for (int i = 0; i < 16; i++)

{

KLUCHI[i] = new BitArray(48);

KLUCHIPREDVORITELNII[i] = new BitArray(56);

}

//перестановка PC1

for (int h =0; h < 56; h++)

{

btKluch1[h] = btKluch2[PC1[h] - 1];

}

listBox1.Items.Add("Ключ после перестановки PC1");

for (int n = 0; n < 56; n++)

{

if ((n == 7) || (n == 15) || (n == 23) || (n == 31) || (n == 39) || (n == 47))

{

bufff += (btKluch1[n] ? 1: 0).ToString();

bufff += " ";

}

else

{

bufff += (btKluch1[n] ? 1: 0).ToString();

}

}

listBox1.Items.Add(bufff);

bufff = "";

//делим на две 28 битовые части

for (int w = 0; w < 28; w++)

{

kluchC0[w] = btKluch1[w];

kluchD0[w] = btKluch1[w+28];

}

listBox1.Items.Add("Ключ С (Левая часть)");

for (int n = 0; n < 28; n++)

{

bufff += (kluchC0[n] ? 1: 0).ToString();

}

listBox1.Items.Add(bufff);

bufff = "";

listBox1.Items.Add("Ключ D (Правая часть)");

for (int n = 0; n < 28; n++)

{

bufff += (kluchD0[n] ? 1: 0).ToString();

}

listBox1.Items.Add(bufff);

bufff = "";

//сдвигаем

for (int i = 0; i < 16; i++)

{

for (int t = 0; t < 28; t++)

{

if (SDVIGG[i] == 1)

{

if (t!= 27)

{

kluchC1[t] = kluchC0[t + 1];

kluchD1[t] = kluchD0[t + 1];

}

else

{

kluchC1[t] = kluchC0[0];

kluchD1[t] = kluchD0[0];

}

}

else

{

if ((t!= 27) && (t!= 26))

{

kluchC1[t] = kluchC0[t + 2];

kluchD1[t] = kluchD0[t + 2];

}

else

{

if (t == 26)

{

kluchC1[t] = kluchC0[0];

kluchD1[t] = kluchD0[0];

}

else

{

kluchC1[t] = kluchC0[1];

kluchD1[t] = kluchD0[1];

}

}

}

}

for (int m = 0; m < 56; m++)

{

if (m < 28)

{

KLUCHIPREDVORITELNII[i][m] = kluchC1[m];

}

else

{

KLUCHIPREDVORITELNII[i][m] = kluchD1[m-28];

}

}

for (int f = 0; f < 28; f++)

{

kluchC0[f] = kluchC1[f];

kluchD0[f] = kluchD1[f];

}

}

//преобразуем в ключевые элементы

for (int i = 0; i < 16; i++)

{

for (int h = 0; h < 48; h++)

{

KLUCHI[i][h] = KLUCHIPREDVORITELNII[i][PC2[h] - 1];

}

}

for (int i = 0; i < 16; i++)

{

listBox1.Items.Add((i + 1) + "й ключ после сдвига");

for (int n = 0; n < 56; n++)

{

if ((n == 7) || (n == 15) || (n == 23) || (n == 31) || (n == 39) || (n == 47))

{

bufff += (KLUCHIPREDVORITELNII[i][n] ? 1: 0).ToString();

bufff += " ";

}

else

{

bufff += (KLUCHIPREDVORITELNII[i][n] ? 1: 0).ToString();

}

}

listBox1.Items.Add(bufff);

bufff = "";

}

for (int i = 0; i < 16; i++)

{

listBox1.Items.Add((i + 1) + "й ключевой элемент");

for (int n = 0; n < 48; n++)

{

if ((n == 7) || (n == 15) || (n == 23) || (n == 31) || (n == 39) || (n == 47))

{

bufff += (KLUCHI[i][n] ? 1: 0).ToString();

bufff += " ";

}

else

{

bufff += (KLUCHI[i][n] ? 1: 0).ToString();

}

}

listBox1.Items.Add(bufff);

bufff = "";

}

}

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.