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

📄 desaes.cpp

📁 Aes和DES加密算法
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		AddRoundKey(state, Nb, W);
	}
	free( W ) ;
}
}
char dbit[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

char abit[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

char InitialTr[64]=
{
   58,50,42,34,26,18,10, 2,
   60,52,44,36,28,20,12, 4,
   62,54,46,38,30,22,14, 6,
   64,56,48,40,32,24,16, 8,
   57,49,41,33,25,17, 9, 1,
   59,51,43,35,27,19,11, 3,
   61,53,45,37,29,21,13, 5,
   63,55,47,39,31,23,15, 7
};

char FinalTr[64]=
{
   40, 8,48,16,56,24,64,32,
   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
};

char Swap[64]=
{
   33,34,35,36,37,38,39,40,
   41,42,43,44,45,46,47,48,
   49,50,51,52,53,54,55,56,
   57,58,59,60,61,62,63,64,
    1, 2, 3, 4, 5, 6, 7, 8,
    9,10,11,12,13,14,15,16,
   17,18,19,20,21,22,23,24,
   25,26,27,28,29,30,31,32
};

char KeyTr1[56]=
{
   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,

   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
};

char KeyTr2[48]=
{
   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
};

char etr[48]=
{
   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,
   20,21,22,23,24,25,
   24,25,26,27,28,29,
   28,29,30,31,32, 1
};

char ptr[32]=
{
   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
};

char rots[16]={1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};

char s[8][64]=
{
 { 14, 4,13, 1, 2,15,11, 8, 3,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,
    3,13, 4, 7,15, 2, 8,14,12, 0, 1,10, 6, 9,11, 5,
    0,14, 7,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,14, 9 },

 { 10, 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,12,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,
    4, 2, 1,11,10,13, 7, 8,15, 9,12, 5, 6, 3, 0,14,
   11, 8,12, 7, 1,14, 2,13, 6,15, 0, 9,10, 4, 5, 3 },

 { 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,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,12 },

 { 13, 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 }
};

struct bitb
{
   unsigned bit0:1;
   unsigned bit1:1;
   unsigned bit2:1;
   unsigned bit3:1;
   unsigned bit4:1;
   unsigned bit5:1;
   unsigned bit6:1;
   unsigned bit7:1;
}  bb;

/*-----------------------------------*/

int getbit(char byteb[],char bitn)
{
   char i,j;
   i=bitn/8;
   j=bitn%8;
   if ((byteb[i]&dbit[j]))
   {
      bb.bit0=1;
      return(1);
   }
   else
   { 
      bb.bit0=0;
      return(0);
   }
}

void putbit(char byteb[],char bitn)
{
   char i,j;
   i=bitn/8;
   j=bitn%8;
   if (bb.bit0)
      byteb[i]|=dbit[j];
   else
      byteb[i]&=abit[j];
}

void transpose(char datab[],char ord[],char bitn)
{
   char i;
   char bx[8];
   for(i=0;i<8;i++) bx[i]=datab[i];
   for(i=0;i<bitn;i++)
   {
      getbit(bx,(ord[i]-1));
      putbit(datab,i);
   }
}

void rotate(char key[])
{
   char i;
   char xx[8];   
   for(i=0;i<7;i++)
      xx[i]=key[i];
   for(i=0;i<7;i++) 
   {   
      xx[i]<<=1;
   }
   getbit(key,8);
   putbit(xx,7);
   getbit(key,16);
   putbit(xx,15);
   getbit(key,24);
   putbit(xx,23);
   getbit(key,0);
   putbit(xx,27);
   getbit(key,32);
   putbit(xx,31);
   getbit(key,40);
   putbit(xx,39);
   getbit(key,48);
   putbit(xx,47);
   getbit(key,28);
   putbit(xx,55);
   for(i=0;i<7;i++)
      key[i]=xx[i];
}

void f(char *kp,char *a,char *x)
{
   char e[8];
   char r,j,i=0;
   for(j=0;j<8;j++)
      e[j]=a[j];
   transpose(e,etr,48);
   for(j=0;j<6;j++)
      kp[j]=e[j]^kp[j];
   for(j=0;j<8;j++)
   {
      r=0;
      if (getbit(kp,6*j+0)) r+=32;
      if (getbit(kp,6*j+1)) r+=8;
      if (getbit(kp,6*j+2)) r+=4;
      if (getbit(kp,6*j+3)) r+=2;
      if (getbit(kp,6*j+4)) r+=1;
      if (getbit(kp,6*j+5)) r+=16;
      r=s[j][r];
      if ((j&0x01)==0)
      {  
         r<<=4;
         x[i]=r; 
      }
      else
      { 
         x[i]|=r; 
         i++;
      }      
   }
   transpose(x,ptr,32);
}

/*----------------------------------------------------*/
extern "C"
{
__declspec(dllexport) void __stdcall Des(BYTE *block, BYTE * buf,BOOL desb)
{
   BYTE k[16][6];
   BYTE b[8],x[8];
   BYTE ikey[8];
   BYTE key[8];
   BYTE *a,*kp;
   BYTE i,j;
   a=block;
   key[0]=0x10;key[1]=0x27;key[2]=0xbc;key[3]=0x30;key[4]=0x02;
   key[5]=0x1b;key[6]=0x1c;key[7]=0xfc;
   transpose(a,InitialTr,64);
   transpose(key,KeyTr1,56);
   for(i=0;i<16;i++)
   {
      for(j=0;j<rots[i];j++)
         rotate(key);
      for(j=0;j<7;j++)
         ikey[j]=key[j];
      transpose(ikey,KeyTr2,48);
      for(j=0;j<6;j++)
         k[i][j]=ikey[j];
   }
   for(i=0;i<16;i++)
   {
      for(j=0;j<8;j++)
         b[j]=a[j];
      for(j=0;j<4;j++)
         a[j]=a[j+4];
      if (desb)
         kp=&k[i][0];
      else
         kp=&k[15-i][0];
      f(kp,a,x);
      for(j=0;j<4;j++)
         a[j+4]=b[j]^x[j];
   }
   transpose(a,Swap,64);
   transpose(a,FinalTr,64);
}
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
        return 1;
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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