1、int Data6464; 8个明文通过十进制转二进制得到的 64bit明文int Key6464; /8个密钥通过十进制转二进制得到的 64bit密钥int DataTemp64; Data64到L0和R0通过IP置换得到的64bit明文,用于得int L032,R032;0的时候表示int flagDorK=0; / 标志位,如果是1的时候表示明文,密文/此段全局变量服务于段雪琦所写所用函数PC_1置换坐标表int PC_156 = 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
2、,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;PC_2置换坐标表int PC_248 = 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;/迭代左移位数数组int lsi16=1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1;/逆初始置换表IP
3、A-1int IP_1_Table64 = 39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25,32,0,40,8,48,16,56,24;int KeyOutBox48=0; / 输出的子密钥数组int Isinumber=0; / 用于记录是第 i次加密,Isinumber 等于i/sherry第二个函数所用/f操作中将R0扩
4、展为48位的置换坐标表int fExpa nd4848 = 32,1,2,3,4,5,4,5,6,7,8,9,8,9,10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,24,25,26,27,28,29,28,29,30,31,32,31;P变换置换坐标表int fPCha nge32=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;S盒置换坐标表int sBox8416 = 14, 4,13, 1,2,15,11,8, 3
5、,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, 0,14, 4,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,1
6、4, 910, 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,1
7、2,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,10, 6, 9, 0,12,11, 7, 8,15, 9,12, 5, 6, 3, 0,14,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,
8、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,1213,
9、 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, 3, 5, 8, 2, 1,14, 7, 4,10, 8,13,15,12, 9, 0, 3, 5, 6,11;/* 生成 R0 L0 *将输入的分别为8个的明文和密钥转化为64bit的明文和密钥,* 分别放入 Data64和Key64; *将生成的64bit的明文通过IP置换得到L0和R0* */void ROa ndLO(char
10、tempData8)int i,j,temp,y;int k=0;int tempBox64;int mtemp=0; for(i=0; i=0;j-)temp=tempDatai&(1j);if(0 = temp)tempBoxk=0;k+;elsetempBoxk=1;/当flagDorK等于1时,为明文转化,生成L0和R0if(flagDorK=1)printf(转化为 64bit 明文 n);for(y=0;y64;y+)Data64y=tempBoxy;tempBoxy=0;prin tf(%d,Data64y);if(y= 7|y=15|y=23|y=39|y=47|y=55|y=
11、63)if(y=31)nDataTempy=Data64DatalPy-1;if(y32)L0y=DataTempy;R0y-32=DataTempy;n 明文Data过IP置换后得到:L0:for(i=0;i32;i+)if(i= 7|i=15|i=23|i=31)nRO:,ROi);nnKey64/当flagDorK等于0时,为密钥转化,生成密钥if(flagDorK=0) 转化为64bit的密钥nKey64y=tempBoxy;,Key64y);if(y= 7|y=15|y=23|y=39|y=47|y=55|y=63) /* 输入函数 void In put()int i;scan f(%c,&preDatai);flagDorK=1;ROa ndLO(preData);getchar(); 请输入密钥:preKeyi);flagDorK=0;R0a ndL0(preKey);/IP逆置换int DESP_1_Tra nsform(i nt data64)int ent;int temp64;for(cnt = 0; cnt 64; cn t+)tempc nt = dataIP_1
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1