private void button2_Click(object sender, EventArgs e) { richTextBox2.Clear(); /*richTextBox2.Text = Encrypt_ECB(richTextBox1.Text, round_keys, var_data_length, var_key_length, richTextBox2);*/ int bl_l = var_data_length / 4; string text1 = richTextBox1.Text; if (richTextBox1.Text.Length % bl_l != 0) { if (richTextBox1.Text.Length < bl_l) { int dop = bl_l - richTextBox1.Text.Length; text1 += "10"; for (int i = 0; i < dop - 1; i++) { text1 += "00"; } } else { int dop = richTextBox1.Text.Length % bl_l; text1 += "1"; for (int i = 0; i < 32 - dop - 1; i++) { text1 += "0"; } } } int kblock = (int)(text1.Length / bl_l); string[] bl = new string[kblock]; int blk = 0; int cols = 0; switch (var_data_length) { case 128: cols = 2; break; case 256: cols = 4; break; case 512: cols = 8; break; } for (int l = 0; l < kblock; l++) { bl[l] = text1.Substring(blk, 16 * cols); blk += 32; } numHex nh = new numHex(); byte[,] mydata = new byte[8, cols]; for (int t = 0; t < bl.Length; t++) { int tt = 0; int nn = 0; for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { mydata[i, j] = (byte)nh.ConvertInt(bl[t].Substring(nn, 2)); nn += 2; } } byte[,] buffer = new byte[8, cols]; for (int r = 0; r < Rkeys.Length; r++) { string[] buff = Rkeys[r].Split('/'); int[] num = new int[buff.Length]; int c = 0; foreach (string s1 in buff) { if (s1 != "") { num[c] = Int32.Parse(s1); c++; } } byte[,] data = new byte[8, cols]; c = 0; for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { data[i, j] = (byte)num[c]; c++; } } if (r == 0) { buffer = key.addNumbers(data, mydata, cols); } else if (r == Rkeys.Length - 1) { buffer = key.sBoxes(buffer, cols); buffer = key.S_Rows(buffer, cols); buffer = key.M_Columns(buffer, cols); buffer = key.addNumbers(data, buffer, cols); for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { string s = buffer[i, j].ToString("x"); if (s.Length < 2) { s = "0" + s; } richTextBox2.Text += s; } } // richTextBox2.Text += Environment.NewLine; } else { buffer = key.sBoxes(buffer, cols); buffer = key.S_Rows(buffer, cols); buffer = key.M_Columns(buffer, cols); buffer = key.xor_rkey(buffer, data, cols); } } } }
private void button3_Click(object sender, EventArgs e) { richTextBox4.Clear(); // richTextBox4.Text = Decrypt_ECB(richTextBox3.Text, round_keys, var_data_length, var_key_length, richTextBox2); int bl_l = var_data_length / 4; string text1 = richTextBox3.Text; int kblock = (int)(text1.Length / bl_l); string[] bl = new string[kblock]; int cols = 0; switch (var_data_length) { case 128: cols = 2; break; case 256: cols = 4; break; case 512: cols = 8; break; } int blk = 0; for (int l = 0; l < kblock; l++) { bl[l] = text1.Substring(blk, 16 * cols); blk += 32; } numHex nh = new numHex(); byte[,] mydata = new byte[8, cols]; for (int t = 0; t < bl.Length; t++) { int tt = 0; int nn = 0; for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { mydata[i, j] = (byte)nh.ConvertInt(bl[t].Substring(nn, 2)); nn += 2; } } byte[,] buffer = new byte[8, cols]; for (int r = Rkeys.Length - 1; r >= 0; r--) { string[] buff = Rkeys[r].Split('/'); int[] num = new int[buff.Length]; int c = 0; foreach (string s1 in buff) { if (s1 != "") { num[c] = Int32.Parse(s1); c++; } } byte[,] data = new byte[8, cols]; c = 0; for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { data[i, j] = (byte)num[c]; c++; } } if (r == 0) { buffer = key.subNumbers(buffer, data, cols); for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { string s = buffer[i, j].ToString("x"); if (s.Length < 2) { s = "0" + s; } richTextBox4.Text += s; } } } else if (r == Rkeys.Length - 1)//0f0e0d0c0b0a09080706050403020100 { buffer = key.subNumbers(mydata, data, cols); buffer = key.Inv_MColumns(buffer, cols); buffer = key.Inv_S_Rows(buffer, cols); buffer = key.Inv_Sboxes(buffer, cols); // richTextBox2.Text += Environment.NewLine; } else { buffer = key.xor_rkey(buffer, data, cols); buffer = key.Inv_MColumns(buffer, cols); buffer = key.Inv_S_Rows(buffer, cols); buffer = key.Inv_Sboxes(buffer, cols); } } } }
private void button1_Click(object sender, EventArgs e) { if (r < 11) { label103.Text = "Раунд " + (r + 1).ToString(); label81.Text = ""; label82.Text = ""; label83.Text = ""; label84.Text = ""; label85.Text = ""; int clabel = 0; foreach (Label ll in label) { ll.Text = ""; } State key = new State(); int cols = 0; switch (var_data_length) { case 128: cols = 2; break; case 256: cols = 4; break; case 512: cols = 8; break; } if (r == 0) { int bl_l = var_data_length / 4; string text1 = richTextBox1; if (text1.Length % bl_l != 0) { if (text1.Length < bl_l) { int dop = bl_l - text1.Length; text1 += "10"; for (int i = 0; i < dop - 1; i++) { text1 += "00"; } } else { int dop = text1.Length % bl_l; text1 += "1"; for (int i = 0; i < 32 - dop - 1; i++) { text1 += "0"; } } } int kblock = (int)(text1.Length / bl_l); string[] bl = new string[kblock]; int blk = 0; mydata = new byte[8, cols]; buffer = new byte[8, cols]; for (int l = 0; l < kblock; l++) { bl[l] = text1.Substring(blk, 16 * cols); blk += 32; } numHex nh = new numHex(); int tt = 0; int nn = 0; for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { mydata[i, j] = (byte)nh.ConvertInt(bl[t].Substring(nn, 2)); nn += 2; } } label86.Text = "Вхідні дані"; int cll = 0; Label[] ll = { label87, label88, label89, label90, label91, label92, label93, label94, label95, label96, label97, label98, label99, label100, label101, label102 }; foreach (Label l in ll) { l.Text = ""; } for (int j = cols - 1; j >= 0; j--) { for (int i = 7; i >= 0; i--) { string s = mydata[i, j].ToString("x"); if (s.Length < 2) { s = "0" + s; } ll[cll].Text += s; cll++; } } } string[] buff = Rkeys[r].Split('/'); int[] num = new int[buff.Length]; int c = 0; foreach (string s1 in buff) { if (s1 != "") { num[c] = Int32.Parse(s1); c++; } } #region keys byte[,] data = new byte[8, cols]; c = 0; for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { data[i, j] = (byte)num[c]; c++; } } label81.Text = "Раундовий ключ"; for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { string s = data[i, j].ToString("x"); if (s.Length < 2) { s = "0" + s; } label[clabel].Text += s; clabel++; } } #endregion if (r == 0) { clabel = 64; buffer = key.addNumbers(data, mydata, cols); label85.Text = "ADD_RKEY"; for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { string s = buffer[i, j].ToString("x"); if (s.Length < 2) { s = "0" + s; } label[clabel].Text += s; clabel++; } } } else if (r == Rkeys.Length - 1) { label82.Text = "S_BOX"; buffer = key.sBoxes(buffer, cols); for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { string s = buffer[i, j].ToString("x"); if (s.Length < 2) { s = "0" + s; } label[clabel].Text += s; clabel++; } } label83.Text = "S_ROW"; buffer = key.S_Rows(buffer, cols); for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { string s = buffer[i, j].ToString("x"); if (s.Length < 2) { s = "0" + s; } label[clabel].Text += s; clabel++; } } label84.Text = "M_COL"; buffer = key.M_Columns(buffer, cols); for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { string s = buffer[i, j].ToString("x"); if (s.Length < 2) { s = "0" + s; } label[clabel].Text += s; clabel++; } } label85.Text = "Зашифровані дані (ADD_RKEY)"; buffer = key.addNumbers(data, buffer, cols); for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { string s = buffer[i, j].ToString("x"); if (s.Length < 2) { s = "0" + s; } label[clabel].Text += s; clabel++; } } // richTextBox2.Text += Environment.NewLine; } else { label82.Text = "S_BOX"; buffer = key.sBoxes(buffer, cols); for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { string s = buffer[i, j].ToString("x"); if (s.Length < 2) { s = "0" + s; } label[clabel].Text += s; clabel++; } } label83.Text = "S_ROW"; buffer = key.S_Rows(buffer, cols); for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { string s = buffer[i, j].ToString("x"); if (s.Length < 2) { s = "0" + s; } label[clabel].Text += s; clabel++; } } label84.Text = "M_COL"; buffer = key.M_Columns(buffer, cols); for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { string s = buffer[i, j].ToString("x"); if (s.Length < 2) { s = "0" + s; } label[clabel].Text += s; clabel++; } } label85.Text = "XOR"; buffer = key.xor_rkey(buffer, data, cols); for (int j = 0; j < cols; j++) { for (int i = 0; i < 8; i++) { string s = buffer[i, j].ToString("x"); if (s.Length < 2) { s = "0" + s; } label[clabel].Text += s; clabel++; } } } r++; } else { t++; r = 0; } }