Пример #1
0
        void SetDefault()
        {
            // IP
            IP = new int[] {
                58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,
                62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
                57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
                61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7
            };
            for (int i = 0; i < IP.Length; i++)
            {
                IP[i]--;
            }
            //for (int i = 0; i < IP.Length; i++) textBox5.Text+= i+ " - "+ IP[i].ToString()+"\r\n";

            // E
            for (int i = 0; i < E.Length; i++)
            {
                E[i] = new Eobj();
            }
            E[0].a  = 2; E[0].b = 48;
            E[1].a  = 3; E[1].b = -1;
            E[2].a  = 4; E[2].b = -1;
            E[3].a  = 5; E[3].b = 7;
            E[4].a  = 6; E[4].b = 8;
            E[5].a  = 9; E[5].b = -1;
            E[6].a  = 10; E[6].b = -1;
            E[7].a  = 11; E[7].b = 13;
            E[8].a  = 12; E[8].b = 14;
            E[9].a  = 15; E[9].b = -1;
            E[10].a = 16; E[10].b = -1;
            E[11].a = 17; E[11].b = 19;
            E[12].a = 18; E[12].b = 20;
            E[13].a = 21; E[13].b = -1;
            E[14].a = 22; E[14].b = -1;
            E[15].a = 23; E[15].b = 25;
            E[16].a = 24; E[16].b = 26;
            E[17].a = 27; E[17].b = -1;
            E[18].a = 28; E[18].b = -1;
            E[19].a = 29; E[19].b = 31;
            E[20].a = 30; E[20].b = 32;
            E[21].a = 33; E[21].b = -1;
            E[22].a = 34; E[22].b = -1;
            E[23].a = 35; E[23].b = 37;
            E[24].a = 36; E[24].b = 38;
            E[25].a = 39; E[25].b = -1;
            E[26].a = 40; E[26].b = -1;
            E[27].a = 41; E[27].b = 43;
            E[28].a = 42; E[28].b = 44;
            E[29].a = 45; E[29].b = -1;
            E[30].a = 46; E[30].b = -1;
            E[31].a = 1; E[31].b = 47;
            for (int i = 0; i < E.Length; i++)
            {
                E[i].a--;
                if (E[i].b != -1)
                {
                    E[i].b--;
                }
            }
            //for (int i = 0; i < E.Length; i++) textBox5.Text += i + " - " + E[i].a.ToString() +", "+ E[i].b.ToString() + "\r\n";

            // K
            // 00011111 00011111 00011111 00011111 00001110 00001110 00001110 00001110

            /*for (int i=3;i<32;i+=8) SetBit(K, i, 1);
             *
             * for (int i = 4; i < 32; i += 8)
             *  for (int j = 0; j < 4; j++) SetBit(K, i + j, 1);
             *
             * for (int i = 36; i < 64; i += 8)
             *  for (int j = 0; j < 3; j++) SetBit(K, i + j, 1);*/

            // 0101010101010101
            //for (int i = 7; i < 64; i += 8) SetBit(K, i, 1);

            // random
            for (int i = 0; i < 8; i++)
            {
                int checkbit = 0;
                for (int j = 0; j < 7; j++)
                {
                    int randnext = rand.Next(0, 2);
                    SetBit(K, i * 8 + j, randnext);
                    checkbit ^= randnext;
                }
                SetBit(K, i * 8 + 7, checkbit);
            }

            textBox5.Text += "K " + WriteBinaryInString(K) + "\r\n";



            // PC1
            PC1 = new int[]
            {
                57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18,
                10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36,
                63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22,
                14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4
            };
            for (int i = 0; i < PC1.Length; i++)
            {
                PC1[i]--;
            }
            //for (int i = 0; i < PC1.Length; i++) textBox5.Text += i + " - " + PC1[i].ToString() + "\r\n";

            // PC2
            PC2 = new int[]
            {
                14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4,
                26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40,
                51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32
            };
            for (int i = 0; i < PC2.Length; i++)
            {
                PC2[i]--;
            }
            //for (int i = 0; i < PC2.Length; i++) textBox5.Text += i + " - " + PC2[i].ToString() + "\r\n";

            // LS
            LS = new int[] { 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 };
            //for (int i = 0; i < LS.Length; i++) textBox5.Text += i + " - " + LS[i].ToString() + "\r\n";

            // S table
            STable = new int[]
            {
                14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7,
                0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8,
                4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0,
                15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13,

                15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10,
                3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5,
                0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15,
                13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9,

                10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8,
                13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1,
                13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7,
                1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12,

                7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15,
                13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9,
                10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4,
                3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14,

                2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9,
                14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6,
                4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14,
                11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3,

                12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11,
                10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8,
                9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6,
                4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13,

                4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1,
                13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6,
                1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2,
                6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12,

                13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7,
                1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2,
                7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 13, 5, 8,
                2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11
            };

            /*
             * for (int i = 0; i < STable.Length; i++)
             * {
             *  textBox5.Text +=  STable[i].ToString() + " ";
             *  if (i % 16 == 15) textBox5.Text += "\r\n";
             * }*/

            // P
            P = new int[]
            {
                16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10,
                2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25
            };
            for (int i = 0; i < P.Length; i++)
            {
                P[i]--;
            }
            //for (int i = 0; i < P.Length; i++) textBox5.Text += i + " - " + P[i].ToString() + "\r\n";


            // Byte[] K0 = GetKey(15);
            // textBox5.Text += "K0 " + WriteBinaryInString(K0) + "\r\n";

            // C
            for (int i = 0; i < C.Length; i++)
            {
                C[i] = (byte)CodeFunc(i);
            }
            textBox5.Text += "C " + WriteBinaryInString(C) + "\r\n";

            // k
            k              = 7;
            textBox5.Text += "k " + k + "\r\n";
        }
Пример #2
0
        void SetRandom()
        {
            // IP
            for (int i = 0; i < IP.Length; i++)
            {
                IP[i] = i;
            }
            for (int i = 0; i < IP.Length; i++)
            {
                int num = rand.Next(0, IP.Length);
                int c   = IP[i];
                IP[i]   = IP[num];
                IP[num] = c;
            }
            //for (int i = 0; i < IP.Length; i++) textBox5.Text+= i+ " - "+ IP[i].ToString()+"\r\n";

            // E
            for (int i = 0; i < E.Length; i++)
            {
                E[i] = new Eobj();
            }
            bool second = false;

            for (int i = 0; i < 48; i++)
            {
                int num      = rand.Next(0, E.Length);
                int numcheck = num;
                while (true)
                {
                    if (E[num].a == -1)
                    {
                        E[num].a = i;
                        break;
                    }
                    else if (second && E[num].b == -1)
                    {
                        E[num].b = i;
                        break;
                    }
                    num++;
                    if (num >= E.Length)
                    {
                        num = 0;
                    }
                    if (num == numcheck)
                    {
                        second = true;
                    }
                }
            }
            //for (int i = 0; i < E.Length; i++) textBox5.Text += i + " - " + E[i].a.ToString() +", "+ E[i].b.ToString() + "\r\n";

            // K

            for (int i = 0; i < 8; i++)
            {
                int checkbit = 0;
                for (int j = 0; j < 7; j++)
                {
                    int randnext = rand.Next(0, 2);
                    SetBit(K, i * 8 + j, randnext);
                    checkbit ^= randnext;
                }
                SetBit(K, i * 8 + 7, checkbit);
            }

            textBox5.Text += "K " + WriteBinaryInString(K) + "\r\n";



            // PC1
            for (int i = 0; i < PC1.Length; i++)
            {
                PC1[i] = i + ((i) / 7);
            }
            for (int i = 0; i < PC1.Length; i++)
            {
                int num = rand.Next(0, PC1.Length);
                int c   = PC1[i];
                PC1[i]   = PC1[num];
                PC1[num] = c;
            }
            //for (int i = 0; i < PC.Length; i++) textBox5.Text += i + " - " + PC[i].ToString() + "\r\n";

            // PC2
            for (int i = 0; i < PC2.Length; i++)
            {
                bool again = true;
                while (again)
                {
                    PC2[i] = rand.Next(0, 56);

                    again = false;
                    for (int j = 0; j < i; j++)
                    {
                        if (PC2[j] == PC2[i])
                        {
                            again = true;
                        }
                    }
                }
            }
            //for (int i = 0; i < PC2.Length; i++) textBox5.Text += i + " - " + PC2[i].ToString() + "\r\n";

            // LS
            for (int i = 0; i < LS.Length; i++)
            {
                LS[i] = rand.Next(1, 3);
            }
            //for (int i = 0; i < LS.Length; i++) textBox5.Text += i + " - " + LS[i].ToString() + "\r\n";

            // S table
            for (int i = 0; i < 4 * 8; i++)
            {
                for (int j = 0; j < 16; j++)
                {
                    STable[i * 16 + j] = j;
                }
                // Перемешивание
                for (int k = 0; k < 16; k++)
                {
                    int num = rand.Next(0, 16);
                    int c   = STable[i * 16 + k];
                    STable[i * 16 + k]   = STable[i * 16 + num];
                    STable[i * 16 + num] = c;
                }
            }

            /*
             * for (int i = 0; i < STable.Length; i++)
             * {
             *  textBox5.Text +=  STable[i].ToString() + " ";
             *  if (i % 16 == 15) textBox5.Text += "\r\n";
             * }*/

            // P
            for (int i = 0; i < P.Length; i++)
            {
                P[i] = i;
            }
            for (int i = 0; i < P.Length; i++)
            {
                int num = rand.Next(0, P.Length);
                int c   = P[i];
                P[i]   = P[num];
                P[num] = c;
            }
            //for (int i = 0; i < P.Length; i++) textBox5.Text += i + " - " + P[i].ToString() + "\r\n";


            Byte[] K0 = GetKey(15);
            textBox5.Text += "K0 " + WriteBinaryInString(K0) + "\r\n";
        }