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

📄 des.lst

📁 C51下DES的另一种算法,可以进行计算DES.
💻 LST
字号:
C51 COMPILER V6.10  DES                                                                    09/11/2002 09:15:35 PAGE 1   


C51 COMPILER V6.10, COMPILATION OF MODULE DES
OBJECT MODULE PLACED IN .\Des.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\Des.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          #define bool unsigned char
   7          static code BYTE initialtr[64]={58,50,42,34,26,18,10,2,
   8          						   60,52,44,36,28,20,12,4,
   9          				           62,54,46,38,30,22,14,6,
  10          				           64,56,48,40,32,24,16,8,
  11          				           57,49,41,33,25,17, 9,1,
  12          				           59,51,43,35,27,19,11,3,
  13          				           61,53,45,37,29,21,13,5,
  14          				           63,55,47,39,31,23,15,7 };
  15          static code BYTE keytr1[56]   ={57,49,41,33,25,17, 9,
  16                                      1,58,50,42,34,26,18,
  17          						   10, 2,59,51,43,35,27,
  18          						   19,11, 3,60,52,44,36,
  19          						   63,55,47,39,31,23,15,
  20          						    7,62,54,46,38,30,22,
  21          						   14, 6,61,53,45,37,29,
  22          						   21,13, 5,28,20,12, 4 };
  23          static code BYTE rots[16]     ={1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};
  24          static code BYTE keytr2[48]   ={14,17,11,24, 1, 5,
  25          							3,28,15, 6,21,10,
  26          						   23,19,12, 4,26, 8,
  27          						   16, 7,27,20,13, 2,
  28          				           41,52,31,37,47,55,
  29          						   30,40,51,45,33,48,
  30          				           44,49,39,56,34,53,
  31          						   46,42,50,36,29,32 };
  32          static code BYTE etr[48]      ={32, 1, 2, 3, 4, 5,
  33                                      4, 5, 6, 7, 8, 9,
  34          							8, 9,10,11,12,13,
  35          						   12,13,14,15,16,17,
  36          				           16,17,18,19,20,21,
  37          						   20,21,22,23,24,25,
  38          						   24,25,26,27,28,29,
  39          						   28,29,30,31,32, 1 };
  40          static code BYTE s[8][64] ={{ 14, 4,13, 1, 2,15,11, 8, 3,10, 6,12, 5, 9, 0, 7,
  41          				          0,15, 7, 4,14, 2,13, 1,10, 6,12,11, 9, 5, 3, 8,
  42          				          4, 1,14, 8,13, 6, 2,11,15,12, 9, 7, 3,10, 5, 0,
  43          				         15,12, 8, 2, 4, 9, 1, 7, 5,11, 3,14,10, 0, 6,13 },
  44          						{15, 1, 8,14, 6,11, 3, 4, 9, 7, 2,13,12, 0, 5,10,
  45          				          3,13, 4, 7,15, 2, 8,14,12, 0, 1,10, 6, 9,11, 5,
  46          				          0,14, 7,11,10, 4,13, 1, 5, 8,12, 6, 9, 3, 2,15,
  47          				          13,8,10, 1, 3,15, 4, 2,11, 6, 7,12, 0, 5,14, 9 },
  48          						{10, 0, 9,14, 6, 3,15, 5, 1,13,12, 7,11, 4, 2, 8,
  49          				         13, 7, 0, 9, 3, 4, 6,10, 2, 8, 5,14,12,11,15, 1,
  50          				         13, 6, 4, 9, 8,15, 3, 0,11, 1, 2,12, 5,10,14, 7,
  51          				          1,10,13, 0, 6, 9, 8, 7, 4,15,14, 3,11, 5, 2,12 },
  52          						{ 7,13,14, 3, 0, 6, 9,10, 1, 2, 8, 5,11,12, 4,15,
  53          				         13, 8,11, 5, 6,15, 0, 3, 4, 7, 2,12, 1,10,14, 9,
  54          				         10, 6, 9, 0,12,11, 7,13,15, 1, 3,14, 5, 2, 8, 4,
  55          				          3,15, 0, 6,10, 1,13, 8, 9, 4, 5,11,12, 7, 2,14 },
C51 COMPILER V6.10  DES                                                                    09/11/2002 09:15:35 PAGE 2   

  56          						{ 2,12, 4, 1, 7,10,11, 6, 8, 5, 3,15,13, 0,14, 9,
  57          				         14,11, 2,12, 4, 7,13, 1, 5, 0,15,10, 3, 9, 8, 6,
  58          				          4, 2, 1,11,10,13, 7, 8,15, 9,12, 5, 6, 3, 0,14,
  59          				         11, 8,12, 7, 1,14, 2,13, 6,15, 0, 9,10, 4, 5, 3 },
  60          						{12,1, 10,15, 9, 2, 6, 8, 0,13, 3, 4,14, 7, 5,11,
  61          				         10,15, 4, 2, 7,12, 9, 5, 6, 1,13,14, 0,11, 3, 8,
  62          				          9,14,15, 5, 2, 8,12, 3, 7, 0, 4,10, 1,13,11, 6,
  63          				          4, 3, 2,12, 9, 5,15,10,11,14, 1, 7, 6, 0, 8,13 },
  64          						{ 4,11, 2,14,15, 0, 8,13, 3,12, 9, 7, 5,10, 6, 1,
  65          						  13,0,11, 7, 4, 9, 1,10,14, 3, 5,12, 2,15, 8, 6,
  66          				          1, 4,11,13,12, 3, 7,14,10,15, 6, 8, 0, 5, 9, 2,
  67          				          6,11,13, 8, 1, 4,10, 7, 9, 5, 0,15, 14,2, 3,12 },
  68          						{13, 2, 8, 4, 6,15,11, 1,10, 9, 3,14, 5, 0,12, 7,
  69          				          1,15,13, 8,10, 3, 7, 4,12, 5, 6,11, 0,14, 9, 2,
  70          				          7,11, 4, 1, 9,12,14, 2, 0, 6,10,13,15, 3, 5, 8,
  71          				          2, 1,14, 7, 4,10, 8,13,15,12, 9, 0, 3, 5, 6,11 }};
  72          static code BYTE ptr[32]    ={16, 7,20,21,29,12,28,17,
  73          						  1,15,23,26, 5,18,31,10,
  74          						  2, 8,24,14,32,27, 3, 9,
  75          				         19,13,30, 6,22,11, 4,25};
  76          static code BYTE swap[64]   ={33,34,35,36,37,38,39,40,
  77          						 41,42,43,44,45,46,47,48,
  78          						 49,50,51,52,53,54,55,56,
  79          						 57,58,59,60,61,62,63,64,
  80          						  1, 2, 3, 4, 5, 6, 7, 8,
  81          						  9,10,11,12,13,14,15,16,
  82          						 17,18,19,20,21,22,23,24,
  83          						 25,26,27,28,29,30,31,32};
  84          
  85          static code BYTE finaltr[64]={40, 8,48,16,56,24,64,32,
  86          				         39, 7,47,15,55,23,63,31,
  87          				         38, 6,46,14,54,22,62,30,
  88          				         37, 5,45,13,53,21,61,29,
  89          				         36, 4,44,12,52,20,60,28,
  90          				         35, 3,43,11,51,19,59,27,
  91          				         34, 2,42,10,50,18,58,26,
  92          				         33, 1,41, 9,49,17,57,25 };
  93          
  94          void increase(BYTE *text1, bool *plainttext1)
  95          {
  96   1        BYTE i,j,b;
  97   1        for(i=0;i<=7;i++)
  98   1        {
  99   2      	b=text1[i];
 100   2          for(j=(i*8);j<=(i*8)+7;j++)
 101   2      	{
 102   3            plainttext1[j]=(b>=0x80);
 103   3      	  b=b<<1;
 104   3      	}
 105   2        }
 106   1      }
 107          
 108          void transpose(bool *_data, BYTE* t,BYTE n)
 109          {
 110   1        BYTE i;
 111   1        bool x[64];
 112   1      
 113   1        memcpy(x,_data,64);
 114   1        for(i=0;i<n;i++)
 115   1      	_data[i]=x[t[i]-1];
 116   1      }
 117          void Rotate_left_cycle(bool* keyr)
C51 COMPILER V6.10  DES                                                                    09/11/2002 09:15:35 PAGE 3   

 118          {
 119   1      	bool temp;
 120   1      	BYTE i;
 121   1      
 122   1      	temp=keyr[0];
 123   1      	for(i=0;i<55;i++)
 124   1      	  keyr[i]=keyr[i+1];
 125   1      	keyr[55]=keyr[27];
 126   1          keyr[27]=temp;
 127   1      }
 128          
 129          void DESsubkey(BYTE* key, bool keylistm[16][56])
 130          {
 131   1        BYTE i,n;
 132   1        bool key0[64];
 133   1      
 134   1        increase(key,key0);
 135   1        transpose(key0,keytr1,56);
 136   1        for(i=0;i<16;i++)
 137   1        {
 138   2          for(n=0;n<rots[i];n++)
 139   2      	  Rotate_left_cycle(key0);
 140   2      	memcpy(keylistm[i], key0, 56);
 141   2      	transpose(keylistm[i], keytr2, 48);
 142   2        }
 143   1      }
 144          void f(bool* R, bool* subkey)
 145          {
 146   1      	BYTE i,j,k, p,temp;
 147   1      	transpose(R,etr,48);         // expand
 148   1          for(i=0;i<48;i++)
 149   1            R[i]^=subkey[i];			 //XOR
 150   1      	for(k=0;k<8;k++)
 151   1      	{
 152   2            p=(32*R[6*k]+16*R[6*k+5]+8*R[6*k+1]+4*R[6*k+2]+2*R[6*k+3]+R[6*k+4]);
 153   2      	  temp=s[k][p];
 154   2      	  for(j=0;j<4;j++)
 155   2      	  {
 156   3              R[4*k+j]=(temp>=0x08);
 157   3              temp=(temp<<1)&0x0f;
 158   3            }
 159   2      	}
 160   1      	transpose(R,ptr,32);
 161   1      }
 162          void press(bool *dt1,BYTE *dt2)
 163          {
 164   1        BYTE a,i,j;
 165   1        for(j=0;j<8;j++)
 166   1        {
 167   2          a=0;
 168   2      	for(i=8*j;i<8*j+8; i++)
 169   2      	{
 170   3            a=a<<1;
 171   3      	  a=a+dt1[i];
 172   3      	 }
 173   2      	 dt2[j]=a;
 174   2        }
 175   1      }
 176          
 177          void DESBasic(bool tp, bool subkey[16][56], BYTE *dest, BYTE *sour)
 178          {
 179   1        bool sour0[80],tmpgrp[32];//sour0; 32+48
C51 COMPILER V6.10  DES                                                                    09/11/2002 09:15:35 PAGE 4   

 180   1        BYTE i,j;
 181   1      
 182   1        increase(sour,sour0);
 183   1        transpose(sour0,initialtr,64);
 184   1      
 185   1        for (i=0;i<16;i++)
 186   1        {
 187   2          for(j=0;j<32;j++)
 188   2            tmpgrp[j]=sour0[32+j];
 189   2      	if(!tp)
 190   2            f(&sour0[32], subkey[i]);
 191   2      	else
 192   2            f(&sour0[32], subkey[15-i]);
 193   2          for(j=0;j<32;j++)
 194   2      	{
 195   3            sour0[j]=sour0[j]^sour0[32+j];//XOR
 196   3      	  sour0[32+j]=tmpgrp[j];
 197   3      	}
 198   2      	if(i<15)
 199   2      	  transpose(sour0,swap,64);
 200   2        }
 201   1        transpose(sour0,finaltr,64);
 202   1        press(sour0,dest);
 203   1      }
 204          
 205          void DESencrypt(BYTE *key,BYTE *dest,BYTE *sour)
 206          {
 207   1        bool subkey[16][56];
 208   1      
 209   1        DESsubkey(key,subkey);
 210   1        DESBasic(0, subkey, dest, sour);
 211   1      }
 212          void DESdecrypt(BYTE *key,BYTE *dest,BYTE *sour)
 213          {
 214   1        bool subkey[16][56];
 215   1      
 216   1        DESsubkey(key,subkey);
 217   1        DESBasic(1, subkey, dest, sour);
 218   1      }
 219          void TripDESencrypt(BYTE *key,BYTE *dest,BYTE *sour)
 220          {
 221   1        DESencrypt(key,dest,sour);
 222   1        DESdecrypt(key+8,dest,dest);
 223   1        DESencrypt(key,dest,dest);
 224   1      }
 225          void TripDESdecrypt(BYTE *key,BYTE *dest,BYTE *sour)
 226          {
 227   1        DESdecrypt(key,dest,sour);
 228   1        DESencrypt(key+8,dest,dest);
 229   1        DESdecrypt(key,dest,dest);
 230   1      }
 231          void main(void)
 232          {
 233   1        char key[8] = {0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef};
 234   1      //  char key2[16]={0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xe7};
 235   1      //  char key3[8]={0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff};
 236   1        char sour[8] = {0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef};
 237   1        char dest[8];//={0xA2,0xD9,0x39,0x16,0x5D,0x26,0xA4,0xCA};
 238   1      
 239   1        DESencrypt(key,dest,sour);
 240   1        while (1);
 241   1      }
C51 COMPILER V6.10  DES                                                                    09/11/2002 09:15:35 PAGE 5   

 242          
 243          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1679    ----
   CONSTANT SIZE    =    920    ----
   XDATA SIZE       =   ----    2147
   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 + -