Exemple #1
0
        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);
                    }
                }
            }
        }
Exemple #2
0
        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);
                    }
                }
            }
        }
Exemple #3
0
        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;
            }
        }