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

📄 des.lst

📁 DES算法
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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 + -