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

📄 desmain.lst

📁 C51下把DES汇编改为C语言的程序.改进版程序.
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.10  DESMAIN                                                                09/19/2002 15:12:12 PAGE 1   


C51 COMPILER V6.10, COMPILATION OF MODULE DESMAIN
OBJECT MODULE PLACED IN .\DesMain.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\DesMain.c LARGE OPTIMIZE(9,SPEED) DEBUG OBJECTEXTEND

stmt level    source

   1          /*--------------------------------------------------------------------------------
   2          DES.C: DES Algorithm Program 
   3          --------------------------------------------------------------------------------*/
   4          #include <string.h>
   5          #define BYTE unsigned char
   6          const BYTE code SBoxes[]={//BoxNr.: 2,1  4,3  6,5  8,7
   7            0xF7,0xE5,0x34,0xB2,
   8            0x02,0x5B,0x92,0xE8,
   9            0x9C,0x88,0x01,0x5C,
  10            0xAF,0xFD,0xEF,0x05,
  11            0x64,0x06,0x9E,0x6F,
  12            0x5B,0x31,0x45,0x93,
  13            0x3A,0xDD,0x7B,0xAA,
  14            0x9C,0xAA,0x86,0xF0,
  15            0x1B,0x79,0x52,0x14,
  16            0xE7,0x92,0xF8,0x2D,
  17            0x46,0x13,0xCC,0xC9,
  18            0x39,0xC4,0x23,0x56,
  19            0xCD,0x9F,0x6D,0xD1,
  20            0xB4,0xEC,0x3E,0x7E,
  21            0xA0,0x24,0xA7,0x36,
  22            0x4A,0x17,0xD0,0xA9,
  23            0x82,0xB0,0x83,0x4D,
  24            0x78,0x66,0x74,0xD2,
  25            0xE5,0x4B,0xBA,0x93,
  26            0x13,0x88,0x09,0x6F,
  27            0xDF,0x6C,0x45,0xF0,
  28            0x26,0xDF,0x1B,0x3C,
  29            0x09,0x32,0xE0,0x05,
  30            0xC5,0x45,0xBC,0xCA,
  31            0x78,0xC7,0xF8,0x27,
  32            0xD1,0x09,0xAD,0x8B,
  33            0xB3,0xAE,0x2F,0x7E,
  34            0x6E,0x73,0x5A,0xB1,
  35            0x21,0x5A,0x16,0x8B,
  36            0x8D,0xB0,0xC1,0x47,
  37            0x5E,0xF1,0xD9,0xE8,
  38            0xF0,0x2E,0x67,0x14,
  39            0xC0,0xBB,0x57,0x8B,
  40            0xBF,0xC8,0x2D,0x46,
  41            0x35,0x24,0x6A,0x37,
  42            0xDA,0x92,0xD6,0xF9,
  43            0xF7,0x6C,0xE2,0x52,
  44            0xC2,0x56,0x98,0x28,
  45            0x69,0x83,0x0C,0x04,
  46            0x05,0x3D,0x65,0xC7,
  47            0x2E,0xD0,0x24,0xBD,
  48            0x51,0x0B,0x43,0x7B,
  49            0x83,0x4A,0xBF,0x6A,
  50            0xEC,0xA7,0x80,0x90,
  51            0x1B,0x06,0x9B,0xE8,
  52            0x28,0xB1,0xF4,0x15,
  53            0xDC,0x7F,0xC1,0x91,
  54            0x76,0x44,0x1A,0x6C,
  55            0xBF,0x1E,0xFD,0xF0,
C51 COMPILER V6.10  DESMAIN                                                                09/19/2002 15:12:12 PAGE 2   

  56            0x13,0xF5,0xC1,0x8D,
  57            0x06,0xE1,0x80,0xAC,
  58            0x6D,0x2F,0x7F,0x3A,
  59            0x44,0xF2,0x3E,0xC9,
  60            0xF9,0x89,0xA7,0x52,
  61            0x9A,0x5D,0xD9,0x7F,
  62            0xA0,0xEA,0x02,0xA4,
  63            0xE2,0xA9,0x43,0x1E,
  64            0x84,0x60,0x3E,0xE1,
  65            0x5D,0x37,0x75,0xD3,
  66            0x37,0xDC,0xE9,0x0F,
  67            0x78,0xC5,0xA8,0x25,
  68            0x4E,0x1E,0x5B,0xBE,
  69            0xA1,0x98,0x16,0x46,
  70            0x9B,0x73,0xBC,0xD3};
  71          BYTE DES(char mode, char data *text, char xdata *key)
  72          {
  73   1        BYTE BitMap[8];  
  74   1        BYTE CalcArea[16];
  75   1        BYTE *ptr0,*ptr1,*ptr2;
  76   1        BYTE R3,R4,R6,A,B,tmp;
  77   1      //mode:B7&B6(00 ECB 01 CBC), B5(0 encrypt 1 decrypt),B4(0  crypt 1 MAC generation/verification)
  78   1      
  79   1      //Check DES mode
  80   1        if(mode&0x80)return 3;//Error: wrong mode
  81   1        mode^=0x20;
  82   1      //DES_:
  83   1        for(R3=8,ptr1=key; R3!=0; R3--,ptr1++)
  84   1        {
  85   2          for(R4=7,ptr0=BitMap,A=*ptr1; R4!=0; R4--,ptr0++)
  86   2          {
  87   3      	  (*ptr0)<<=1;
  88   3      	  if(A&0x80)(*ptr0)++;
  89   3            A<<=1;
  90   3          }
  91   2        }
  92   1        A=BitMap[4];BitMap[4]=BitMap[6];BitMap[6]=A;
  93   1        //  memcpy(BitMap,"\x0f\x33\x55\x00\x55\x33\x0f\x00",8);
  94   1      //SetKeyNxt:
  95   1        for(R3=7,ptr1=BitMap,ptr0=CalcArea; R3!=0; R3--,ptr1++)
  96   1        {
  97   2          A=*ptr1;
  98   2      	for(R4=R3;R4!=0;R4--,ptr0++)
  99   2      	{
 100   3      	  tmp=(*ptr0);
 101   3      	  (*ptr0)=(tmp>>2)+(tmp<<7);
 102   3            if(A&0x01)
 103   3              (*ptr0)+=0x40;
 104   3            A>>=1;
 105   3      	}
 106   2      	ptr0=CalcArea;
 107   2          for(R4=8-R3;R4!=0;R4--,ptr0++)
 108   2      	{
 109   3        	  tmp=(*ptr0);
 110   3      	  (*ptr0)=(tmp>>2)+(tmp<<7);
 111   3            if(A&0x01)
 112   3              (*ptr0)+=0x40;
 113   3            A>>=1;
 114   3          }
 115   2        }
 116   1      /***************Function DES ***************/
 117   1      //DesAction://InitPerm:
C51 COMPILER V6.10  DESMAIN                                                                09/19/2002 15:12:12 PAGE 3   

 118   1        for(R6=8,ptr1=text;R6!=0;R6--,ptr1++)
 119   1        {
 120   2          A=*ptr1;//permute byte into bitmap area
 121   2          if(R6==1)break;
 122   2          for(R4=8,ptr0=BitMap;R4!=0;R4--,ptr0++)
 123   2          {
 124   3            (*ptr0)<<=1;
 125   3        	  if(A&0x80)(*ptr0)++;
 126   3            A<<=1;
 127   3          }
 128   2        }
 129   1      //InitEnd:  ;permute last byte
 130   1        A=(A>>6)+(A<<2);
 131   1        for(R4=8,ptr0=BitMap;R4!=0;R4--,ptr0++)
 132   1        {
 133   2          if(A&0x80)(*ptr0)|=0x80;else (*ptr0)&=~0x80;
 134   2      	 A<<=1;
 135   2        }
 136   1      //load permuted input in calculation area
 137   1        for(R4=4,ptr1=CalcArea+15,ptr0=BitMap+1;R4!=0;R4--,ptr1--,ptr0+=2)
 138   1          *ptr1=*ptr0;
 139   1        for(R4=4,ptr0=BitMap;R4!=0;R4--,ptr1--,ptr0+=2)
 140   1          *ptr1=*ptr0;  
 141   1      
 142   1      //16 rounds DES operation //OneRound:
 143   1        for(R3=16,ptr2=CalcArea+8;R3!=0;R3--)
 144   1        {
 145   2          B=(R3-1)%7;
 146   2          if(mode&0x30)   //Decode~, BuildMac//EncShift2
 147   2          {
 148   3      	  for( R6=( B&& (R3!=16) )?2:1; R6!=0; R6--)
 149   3      	  {
 150   4              ptr1=CalcArea+6;
 151   4        	    A=(*ptr1);
 152   4              tmp=CalcArea[0];
 153   4        	    (*ptr1)=(tmp>>2)+(tmp<<6);
 154   4              ptr1--;
 155   4              for(R4=5; R4!=0; R4--, ptr1--)
 156   4         	    {
 157   5      	      tmp=(*ptr1);
 158   5      		  (*ptr1)=A;
 159   5      		  A=tmp;
 160   5      	    }
 161   4              (*ptr1)=A;
 162   4      	  }
 163   3      	}//Decode~, BuildMac
 164   2      //RoundKey: 
 165   2      /*Permutation 36  5 27 61 18 54  9 47    = D6, C6
 166   2                    44 13 35  6 26 62 17 55    = D5, C5
 167   2                    52 21 43 14 34  7 25 63    = D4, C4
 168   2                    60 29 51 22 42 15 33  4    = D3, C3
 169   2                     3 37 59 30 50 23 41 12    = D2, C2
 170   2                    11 45  2 38 58 31 49 20    = D1, C1
 171   2                    19 53 10 46  1 39 57 28    = D0, C0
 172   2      */
 173   2          A=CalcArea[0]; 
 174   2          if(A&0x80)BitMap[7]|=0x01;else BitMap[7]&=~0x01;
 175   2          if(A&0x40)BitMap[7]|=0x04;else BitMap[7]&=~0x04;      
 176   2          if(A&0x20){
 177   3        	  BitMap[1]|=0x10;BitMap[2]|=0x20;BitMap[7]|=0x02;
 178   3      	}else{
 179   3            BitMap[1]&=~0x10;BitMap[2]&=~0x20;BitMap[7]&=~0x02;      
C51 COMPILER V6.10  DESMAIN                                                                09/19/2002 15:12:12 PAGE 4   

 180   3          }
 181   2          if(A&0x10){
 182   3      	  BitMap[0]|=0x20;BitMap[1]|=0x02;BitMap[2]|=0x10;BitMap[6]|=0x01;
 183   3      	}else{
 184   3            BitMap[0]&=~0x20;BitMap[1]&=~0x02;BitMap[2]&=~0x10;BitMap[6]&=~0x01;
 185   3      	}
 186   2          if(A&0x08){
 187   3      	  BitMap[0]|=0x10;BitMap[2]|=0x08;
 188   3      	}else{
 189   3            BitMap[0]&=~0x10;BitMap[2]&=~0x08;      
 190   3          }
 191   2          if(A&0x04){
 192   3      	  BitMap[1]|=0x01;BitMap[6]|=0x20;BitMap[7]|=0x80;
 193   3      	}else{
 194   3            BitMap[1]&=~0x01;BitMap[6]&=~0x20;BitMap[7]&=~0x80;
 195   3          }  
 196   2          if(A&0x02){
 197   3      	  BitMap[0]|=0x04;BitMap[6]|=0x10;
 198   3      	}else{
 199   3            BitMap[0]&=~0x04;BitMap[6]&=~0x10;      
 200   3      	}
 201   2          if(A&0x01)BitMap[6]|=0x08;else BitMap[6]&=~0x08;      
 202   2      //    memcpy(BitMap,"\x9c\x2d\xce\x80\x87\x99\x72\xe5",8);      
 203   2          A=CalcArea[1];
 204   2      	if(A&0x80){
 205   3      	  BitMap[2]|=0x40;BitMap[3]|=0x02;BitMap[5]|=0x01;  
 206   3      	}else{
 207   3            BitMap[2]&=~0x40;BitMap[3]&=~0x02;BitMap[5]&=~0x01;
 208   3      	}
 209   2          if(A&0x40)BitMap[4]|=0x04;else BitMap[4]&=~0x04;      
 210   2      	if(A&0x20){
 211   3      	   BitMap[3]|=0x04;BitMap[5]|=0x02;      
 212   3      	}else{
 213   3      	   BitMap[3]&=~0x04;BitMap[5]&=~0x02;      
 214   3      	}
 215   2          if(A&0x10){	  
 216   3            BitMap[3]|=0x01;BitMap[5]|=0x08;      
 217   3      	}else{
 218   3      	  BitMap[3]&=~0x01; BitMap[5]&=~0x08;      
 219   3      	}
 220   2          if(A&0x04)BitMap[5]|=0x40;else BitMap[5]&=~0x40;
 221   2          if(A&0x02){
 222   3      	   BitMap[3]|=0x80;BitMap[4]|=0x20;      
 223   3      	}else{

⌨️ 快捷键说明

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