⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des加密算法在c#下的实现.txt

📁 DES加密算法在C#下的实现。此程序分两部分
💻 TXT
📖 第 1 页 / 共 4 页
字号:
            S7[2, 1] = 4;
            S7[2, 2] = 11;
            S7[2, 3] = 13;
            S7[2, 4] = 12;
            S7[2, 5] = 3;
            S7[2, 6] = 7;
            S7[2, 7] = 14;
            S7[2, 8] = 10;
            S7[2, 9] = 15;
            S7[2, 10] = 6;
            S7[2, 11] = 8;
            S7[2, 12] = 0;
            S7[2, 13] = 5;
            S7[2, 14] = 9;
            S7[2, 15] = 2;
            S7[3, 0] = 6;
            S7[3, 1] = 11;
            S7[3, 2] = 13;
            S7[3, 3] = 8;
            S7[3, 4] = 1;
            S7[3, 5] = 4;
            S7[3, 6] = 10;
            S7[3, 7] = 7;
            S7[3, 8] = 9;
            S7[3, 9] = 5;
            S7[3, 10] = 0;
            S7[3, 11] = 15;
            S7[3, 12] = 14;
            S7[3, 13] = 2;
            S7[3, 14] = 3;
            S7[3, 15] = 12;

            S8[0, 0] = 13;
            S8[0, 1] = 2;
            S8[0, 2] = 8;
            S8[0, 3] = 4;
            S8[0, 4] = 6;
            S8[0, 5] = 15;
            S8[0, 6] = 11;
            S8[0, 7] = 1;
            S8[0, 8] = 10;
            S8[0, 9] = 9;
            S8[0, 10] = 3;
            S8[0, 11] = 14;
            S8[0, 12] = 5;
            S8[0, 13] = 0;
            S8[0, 14] = 12;
            S8[0, 15] = 7;
            S8[1, 0] = 1;
            S8[1, 1] = 15;
            S8[1, 2] = 13;
            S8[1, 3] = 8;
            S8[1, 4] = 10;
            S8[1, 5] = 3;
            S8[1, 6] = 7;
            S8[1, 7] = 4;
            S8[1, 8] = 12;
            S8[1, 9] = 5;
            S8[1, 10] = 6;
            S8[1, 11] = 11;
            S8[1, 12] = 0;
            S8[1, 13] = 14;
            S8[1, 14] = 9;
            S8[1, 15] = 2;
            S8[2, 0] = 7;
            S8[2, 1] = 11;
            S8[2, 2] = 4;
            S8[2, 3] = 1;
            S8[2, 4] = 9;
            S8[2, 5] = 12;
            S8[2, 6] = 14;
            S8[2, 7] = 2;
            S8[2, 8] = 0;
            S8[2, 9] = 6;
            S8[2, 10] = 10;
            S8[2, 11] = 13;
            S8[2, 12] = 15;
            S8[2, 13] = 3;
            S8[2, 14] = 5;
            S8[2, 15] = 8;
            S8[3, 0] = 2;
            S8[3, 1] = 1;
            S8[3, 2] = 14;
            S8[3, 3] = 7;
            S8[3, 4] = 4;
            S8[3, 5] = 10;
            S8[3, 6] = 8;
            S8[3, 7] = 13;
            S8[3, 8] = 15;
            S8[3, 9] = 12;
            S8[3, 10] = 9;
            S8[3, 11] = 0;
            S8[3, 12] = 3;
            S8[3, 13] = 5;
            S8[3, 14] = 6;
            S8[3, 15] = 11;
            
            //从明文的输入获得经过S盒的值
            j = Mi[0] * 2 + Mi[5];
            k = Mi[1] * 8 + Mi[2] * 4 + Mi[3] * 2 + Mi[4];
            output[0] = S1[j, k];
            output[1] = S2[j, k];
            output[2] = S3[j, k];
            output[3] = S4[j, k];
            output[4] = S5[j, k];
            output[5] = S6[j, k];
            output[6] = S7[j, k];
            output[7] = S8[j, k];
            return output[i - 1];
        }
        //输入16个密钥和明文计算DES
        public int[] DES(int[][] keys, char[] r)
        {
            //2进制明文分组Li Ri
            int[] L0 = new int[32]; int[] R0 = new int[32];
            int[] L1 = new int[32]; int[] R1 = new int[32];
            int[] L2 = new int[32]; int[] R2 = new int[32];
            int[] L3 = new int[32]; int[] R3 = new int[32];
            int[] L4 = new int[32]; int[] R4 = new int[32];
            int[] L5 = new int[32]; int[] R5 = new int[32];
            int[] L6 = new int[32]; int[] R6 = new int[32];
            int[] L7 = new int[32]; int[] R7 = new int[32];
            int[] L8 = new int[32]; int[] R8 = new int[32];
            int[] L9 = new int[32]; int[] R9 = new int[32];
            int[] L10 = new int[32]; int[] R10 = new int[32];
            int[] L11 = new int[32]; int[] R11 = new int[32];
            int[] L12 = new int[32]; int[] R12 = new int[32];
            int[] L13 = new int[32]; int[] R13 = new int[32];
            int[] L14 = new int[32]; int[] R14 = new int[32];
            int[] L15 = new int[32]; int[] R15 = new int[32];
            int[] L16 = new int[32]; int[] R16 = new int[32];
            int[] afterG = new int[32];
            
            //获得2进制明文经过IP置换后结果
            int[] afterIP = IP(r);
            int[] Final = new int[64];
            int[] temp = new int[64];
            //获得L0 R0
            for (int i = 0; i < 32; i++)
            {
                L0 = afterIP;
                R0 = afterIP[i + 32];
            }

            //用R0和第一个密钥进行g函数

            afterG = g(R0, keys[0]);
            for (int i=0;i<32;i++)
            {
                if (L0!=afterG) R1=1;//L0与R1异或
            }
            L1 = R0;
            //第一重

            afterG = g(R1, keys[1]);
            for (int i = 0; i < 32; i++)
            {
                if (L1 != afterG) R2 = 1;
            }
            L2 = R1;
            //第二重
            afterG = g(R2, keys[2]);
            for (int i = 0; i < 32; i++)
            {
                if (L2 != afterG) R3 = 1;
            }
            L3 = R2;
            //第3重
            afterG = g(R3, keys[3]);
            for (int i = 0; i < 32; i++)
            {
                if (L3 != afterG) R4 = 1;
            }
            L4 = R3;
            //第4重
            afterG = g(R4, keys[4]);
            for (int i = 0; i < 32; i++)
            {
                if (L4 != afterG) R5 = 1;
            }
            L5 = R4;
            //第5重
            afterG = g(R5, keys[5]);
            for (int i = 0; i < 32; i++)
            {
                if (L5 != afterG) R6 = 1;
            }
            L6 = R5;
            //第6重
            afterG = g(R6, keys[6]);
            for (int i = 0; i < 32; i++)
            {
                if (L6 != afterG) R7 = 1;
            }
            L7 = R6;
            //第7重
            afterG = g(R7, keys[7]);
            for (int i = 0; i < 32; i++)
            {
                if (L7 != afterG) R8 = 1;
            }
            L8 = R7;
            //第8重
            afterG = g(R8, keys[8]);
            for (int i = 0; i < 32; i++)
            {
                if (L8 != afterG) R9 = 1;
            }
            L9 = R8;
            //第9重
            afterG = g(R9, keys[9]);
            for (int i = 0; i < 32; i++)
            {
                if (L9 != afterG) R10 = 1;
            }
            L10 = R9;
            //第10重
            afterG = g(R10, keys[10]);
            for (int i = 0; i < 32; i++)
            {
                if (L10 != afterG) R11 = 1;
            }
            L11 = R10;
            //第11重
            afterG = g(R11, keys[11]);
            for (int i = 0; i < 32; i++)
            {
                if (L11 != afterG) R12 = 1;
            }
            L12 = R11;
            //第12重
            afterG = g(R12, keys[12]);
            for (int i = 0; i < 32; i++)
            {
                if (L12 != afterG) R13 = 1;
            }
            L13 = R12;
            //第13重
            afterG = g(R13, keys[13]);
            for (int i = 0; i < 32; i++)
            {
                if (L13 != afterG) R14 = 1;
            }
            L14 = R13;
            //第14重
            afterG = g(R14, keys[14]);
            for (int i = 0; i < 32; i++)
            {
                if (L14 != afterG) R15 = 1;
            }
            L15 = R14;
            //第15重
            afterG = g(R15, keys[15]);
            for (int i = 0; i < 32; i++)
            {
                if (L15 != afterG) R16 = 1;
            }
            L16 = R15;
            //第16重






            //合并L16和R16
            for (int i = 0; i < 32; i++)
            {
                temp = R16;
                temp[i + 32] = L16;
            }
            //明文经过IP-1置换输出
            Final = IP_1(temp);
            return Final;



        }
        //16个密钥倒向输入计算DES反函数,原理大致与DES相同
        public int[] DES_1(int[][] keys, char[] r)
        {
            int[] L0 = new int[32]; int[] R0 = new int[32];
            int[] L1 = new int[32]; int[] R1 = new int[32];
            int[] L2 = new int[32]; int[] R2 = new int[32];
            int[] L3 = new int[32]; int[] R3 = new int[32];
            int[] L4 = new int[32]; int[] R4 = new int[32];
            int[] L5 = new int[32]; int[] R5 = new int[32];
            int[] L6 = new int[32]; int[] R6 = new int[32];
            int[] L7 = new int[32]; int[] R7 = new int[32];
            int[] L8 = new int[32]; int[] R8 = new int[32];
            int[] L9 = new int[32]; int[] R9 = new int[32];
            int[] L10 = new int[32]; int[] R10 = new int[32];
            int[] L11 = new int[32]; int[] R11 = new int[32];
            int[] L12 = new int[32]; int[] R12 = new int[32];
            int[] L13 = new int[32]; int[] R13 = new int[32];
            int[] L14 = new int[32]; int[] R14 = new int[32];
            int[] L15 = new int[32]; int[] R15 = new int[32];
            int[] L16 = new int[32]; int[] R16 = new int[32];
            int[] afterG = new int[32];
            int[] afterIP = IP(r);
            int[] Final = new int[64];
            int[] temp = new int[64];
            
            for (int i = 0; i < 32; i++)
            {
                L0 = afterIP;
                R0 = afterIP[i + 32];
            }


             afterG = g(R0, keys[15]);
            for (int i=0;i<32;i++)
            {
                if (L0!=afterG) R1=1;
            }
            L1 = R0;
            //第一重

            afterG = g(R1, keys[14]);
            for (int i = 0; i < 32; i++)
            {
                if (L1 != afterG) R2 = 1;
            }
            L2 = R1;
            //第二重
            afterG = g(R2, keys[13]);
            for (int i = 0; i < 32; i++)
            {
                if (L2 != afterG) R3 = 1;
            }
            L3 = R2;
            //第3重
            afterG = g(R3, keys[12]);
            for (int i = 0; i < 32; i++)
            {
                if (L3 != afterG) R4 = 1;
            }
            L4 = R3;
            //第4重
            afterG = g(R4, keys[11]);
            for (int i = 0; i < 32; i++)
            {
                if (L4 != afterG) R5 = 1;
            }
            L5 = R4;
            //第5重
            afterG = g(R5, keys[10]);
            for (int i = 0; i < 32; i++)
            {
                if (L5 != afterG) R6 = 1;
            }
            L6 = R5;
            //第6重
            afterG = g(R6, keys[9]);
            for (int i = 0; i < 32; i++)
            {
                if (L6 != afterG) R7 = 1;
            }
            L7 = R6;
            //第7重
            afterG = g(R7, keys[8]);
            for (int i = 0; i < 32; i++)
            {
                if (L7 != afterG) R8 = 1;
            }
            L8 = R7;
            //第8重
            afterG = g(R8, keys[7]);
            for (int i = 0; i < 32; i++)
            {
                if (L8 != afterG) R9 = 1;
            }
            L9 = R8;
            //第9重
            afterG = g(R9, keys[6]);
            for (int i = 0; i < 32; i++)
            {
                if (L9 != afterG) R10 = 1;
            }
            L10 = R9;
            //第10重
            afterG = g(R10, keys[5]);
            for (int i = 0; i < 32; i++)
            {
                if (L10 != afterG) R11 = 1;
            }
            L11 = R10;
            //第11重
            afterG = g(R11, keys[4]);
            for (int i = 0; i < 32; i++)
            {
                if (L11 != afterG) R12 = 1;
            }
            L12 = R11;
            //第12重
            afterG = g(R12, keys[3]);
            for (int i = 0; i < 32; i++)
            {
                if (L12 != afterG) R13 = 1;
            }
            L13 = R12;
            //第13重
            afterG = g(R13, keys[2]);
            for (int i = 0; i < 32; i++)
            {
                if (L13 != afterG) R14 = 1;
            }
            L14 = R13;
            //第14重
            afterG = g(R14, keys[1]);
            for (int i = 0; i < 32; i++)
            {
                if (L14 != afterG) R15 = 1;
            }
            L15 = R14;
            //第15重
            afterG = g(R15, keys[0]);
            for (int i = 0; i < 32; i++)
            {
                if (L15 != afterG) R16 = 1;
            }
            L16 = R15;
            //第16重








            for (int i = 0; i < 32; i++)
            {
                temp = R16;
                temp[i + 32] = L16;
            }
            Final = IP_1(temp);
            return Final;



        }

    }
} 

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -