📄 des.lst
字号:
110 4 temp1[cnt1+M_Times[cnt0]]=temp0[cnt1+28];
111 4 for(cnt1=0;cnt1<28-M_Times[cnt0];cnt1++) //前28位移动
112 4 temp0[cnt1]=temp0[cnt1+M_Times[cnt0]];
113 4 for(cnt1=0;cnt1<M_Times[cnt0];cnt1++)
114 4 temp0[cnt1+28-M_Times[cnt0]]=temp1[cnt1];
115 4 for(cnt1=0;cnt1<28-M_Times[cnt0];cnt1++) //后28位移动
116 4 temp0[cnt1+28]=temp0[cnt1+28+M_Times[cnt0]];
117 4 for(cnt1=0;cnt1<M_Times[cnt0];cnt1++)
C51 COMPILER V8.18 DES 05/01/2010 21:26:03 PAGE 3
118 4 temp0[cnt1+56-M_Times[cnt0]]=temp1[cnt1+M_Times[cnt0]];
119 4 for(cnt1 = 0; cnt1 < 48; cnt1++)
120 4 subKeys[cnt1] = temp0[C_Rep_2[cnt1]]; //C_Rep_2置换,产生子密钥
121 4 //////////Init_Table置换//////////////////
122 4 if(Flag==0)
123 4 {
124 5 for(cnt1 = 0; cnt1 < 64; cnt1++)
125 5 temp0[cnt1] = Data_Bits[Init_Table[cnt1]];
126 5 for(cnt1=0;cnt1<64;cnt1++)
127 5 Data_Bits[cnt1]=temp0[cnt1];
128 5 Flag=1;
129 5 }
130 4 //////将右半部分进行从32位48位扩展置换/////////////
131 4 for(cnt1 = 0; cnt1 < 32; cnt1++)
132 4 temp0[cnt1]= Data_Bits[cnt1+32];
133 4 for(cnt1 = 0; cnt1 < 48; cnt1++)
134 4 temp1[cnt1] = temp0[E_Table[cnt1]]^subKeys[cnt1]; //将右半部分与子密钥进行异或操作
135 4 ////////////异或结果进入S盒,输出32位结果 ////////////
136 4 for(cnt1 = 0; cnt1 < 8; cnt1++)
137 4 {
138 5 s_cnt1 = cnt1*6;
139 5 s_cnt2 = cnt1<<2;
140 5 //计算在S盒中的行与列
141 5 line = (temp1[s_cnt1]<<1) + temp1[s_cnt1+5];
142 5 row = (temp1[s_cnt1+1]<<3) + (temp1[s_cnt1+2]<<2) + (temp1[s_cnt1+3]<<1) + temp1[s_cnt1+4];
-
143 5 output = S[cnt1][line][row];
144 5 //化为2进制 为什么没有高四位?
145 5 temp1[s_cnt2] = (output&0X08)>>3;
146 5 temp1[s_cnt2+1] = (output&0X04)>>2;
147 5 temp1[s_cnt2+2] = (output&0X02)>>1;
148 5 temp1[s_cnt2+3] = output&0x01;
149 5 }
150 4 /////////F置换////////////////////////////
151 4 for(cnt1 = 0; cnt1 < 32; cnt1++)
152 4 temp0[cnt1] = temp1[F_Table[cnt1]];
153 4 for(cnt1 = 0; cnt1 < 32; cnt1++)
154 4 temp1[cnt1]=temp0[cnt1];
155 4 for(cnt1 = 0; cnt1 < 32; cnt1++)
156 4 Data_Bits[cnt1] ^= temp1[cnt1]; //将明文左半部分与右半部分进行异或
157 4 ///////////////左右移位 ///////////////
158 4 if(cnt0!=15)
159 4 {
160 5 for(cnt1 = 0; cnt1 < 32; cnt1++)
161 5 temp1[cnt1]=Data_Bits[cnt1];
162 5 for(cnt1 = 0; cnt1 < 32; cnt1++)
163 5 Data_Bits[cnt1]=Data_Bits[cnt1+32];
164 5 for(cnt1 = 0; cnt1 < 32; cnt1++)
165 5 Data_Bits[cnt1+32]=temp1[cnt1];
166 5 }
167 4
168 4
169 4 }
170 3 //////////Init_1_Table置换//////////////////
171 3 for(cnt0 = 0; cnt0< 64; cnt0++)
172 3 temp0[cnt0] = Data_Bits[Init_1_Table[cnt0]];
173 3 for(cnt0=0;cnt0<64;cnt0++)
174 3 Data_Bits[cnt0]=temp0[cnt0];
175 3 for(cnt0=0;cnt0<8;cnt0++)
176 3 Data_Block[cnt0]=0;
177 3 for(cnt0 = 0; cnt0 < 8; cnt0++) // 二进制数据流转换成字节
178 3 for(cnt1 = 0;cnt1 < 8; cnt1++)
C51 COMPILER V8.18 DES 05/01/2010 21:26:03 PAGE 4
179 3 Data_Block[cnt0] |=Data_Bits[(cnt0<<3)+cnt1]<<cnt1;
180 3 ES=1;
181 3 SBUF=Data_Block[s_sf_cnt];
182 3
183 3 }
184 2 }
185 1 else
186 1 {
187 2 TI=0;
188 2 s_sf_cnt++;
189 2 if(s_sf_cnt==8)
190 2 s_sf_cnt=0;
191 2 else
192 2 SBUF=Data_Block[s_sf_cnt];
193 2
194 2 }
195 1 }
196 //主函数
197 void main(void)
198 {
199 1 SCON=0XD0;
200 1 TMOD=0X20;
201 1 TH1=0XFD;
202 1 TL1=0XFD;
203 1 TR1=1;
204 1 ES=1;
205 1 EA=1;
206 1 r_sf_cnt=0;
207 1 s_sf_cnt=0;
208 1 for(;;) {}
209 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1695 ----
CONSTANT SIZE = 840 ----
XDATA SIZE = 2 238
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -