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

📄 lmdes.cpp

📁 .net2003下写的多种加密加密算法的演示
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	           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};
  int ip[65]={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};
  int s[9],s11[7],s21[7],s31[7],s41[7],s51[7],s61[7],s71[7],s81[7];
  int temp[5];
  for(i=1;i<=64;i++)
  {
	  t2[i]=t1[ip[i-1]];
  }
  for(i=1;i<33;i++)
  {
	  R0[i]=t2[i];
	  L0[i]=t2[i+32];
  }
//第一次迭代
  for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
    RE1[i]=R0[E[i-1]];
  for(i=1;i<=48;i++)//与K1按位作不进位加法运算
	RE1[i]=RE1[i]+K16[i];
  for(i=1;i<=48;i++)
  {
	if(RE1[i]==2)
      RE1[i]=0;
  }
  for(i=1;i<7;i++)//48位分成8组
  {
	s11[i]=RE1[i];
	s21[i]=RE1[i+6];
	s31[i]=RE1[i+12];
	s41[i]=RE1[i+18];
	s51[i]=RE1[i+24];
	s61[i]=RE1[i+30];
	s71[i]=RE1[i+36];
	s81[i]=RE1[i+42];
  }//下面经过S盒,得到8个数
  s[1]=s1[s11[6]+s11[1]*2][s11[5]+s11[4]*2+s11[3]*4+s11[2]*8];
  s[2]=s2[s21[6]+s21[1]*2][s21[5]+s21[4]*2+s21[3]*4+s21[2]*8];
  s[3]=s3[s31[6]+s31[1]*2][s31[5]+s31[4]*2+s31[3]*4+s31[2]*8];
  s[4]=s4[s41[6]+s41[1]*2][s41[5]+s41[4]*2+s41[3]*4+s41[2]*8];
  s[5]=s5[s51[6]+s51[1]*2][s51[5]+s51[4]*2+s51[3]*4+s51[2]*8];
  s[6]=s6[s61[6]+s61[1]*2][s61[5]+s61[4]*2+s61[3]*4+s61[2]*8];
  s[7]=s7[s71[6]+s71[1]*2][s71[5]+s71[4]*2+s71[3]*4+s71[2]*8];
  s[8]=s8[s81[6]+s81[1]*2][s81[5]+s81[4]*2+s81[3]*4+s81[2]*8];
  for(i=0;i<8;i++)//8个数变换输出二进制
  {
 	for(j=1;j<5;j++)
	{
	  temp[j]=s[i+1]%2;
	  s[i+1]=s[i+1]/2;
	}
	for(j=1;j<5;j++)
      f[4*i+j]=temp[5-j];
  }
  for(i=1;i<33;i++)//经过P变换
    frk[i]=f[P[i-1]];
  for(i=1;i<33;i++)
    L1[i]=R0[i];
  for(i=1;i<33;i++)
  {
	R1[i]=L0[i]+frk[i];
	if(R1[i]==2)
      R1[i]=0;
  }
//进行第二次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
	  RE1[i]=R1[E[i-1]];
	for(i=1;i<=48;i++)//与K15按位作不进位加法运算
	  RE1[i]=RE1[i]+K15[i];
	for(i=1;i<=48;i++)
    {
		if(RE1[i]==2)
          RE1[i]=0;
    }
	for(i=1;i<7;i++)//48位分成8组
	{
		s11[i]=RE1[i];
		s21[i]=RE1[i+6];
		s31[i]=RE1[i+12];
		s41[i]=RE1[i+18];
		s51[i]=RE1[i+24];
		s61[i]=RE1[i+30];
		s71[i]=RE1[i+36];
		s81[i]=RE1[i+42];
	}//下面经过S盒,得到8个数
	s[1]=s1[s11[6]+s11[1]*2][s11[5]+s11[4]*2+s11[3]*4+s11[2]*8];
	s[2]=s2[s21[6]+s21[1]*2][s21[5]+s21[4]*2+s21[3]*4+s21[2]*8];
	s[3]=s3[s31[6]+s31[1]*2][s31[5]+s31[4]*2+s31[3]*4+s31[2]*8];
	s[4]=s4[s41[6]+s41[1]*2][s41[5]+s41[4]*2+s41[3]*4+s41[2]*8];
	s[5]=s5[s51[6]+s51[1]*2][s51[5]+s51[4]*2+s51[3]*4+s51[2]*8];
	s[6]=s6[s61[6]+s61[1]*2][s61[5]+s61[4]*2+s61[3]*4+s61[2]*8];
	s[7]=s7[s71[6]+s71[1]*2][s71[5]+s71[4]*2+s71[3]*4+s71[2]*8];
	s[8]=s8[s81[6]+s81[1]*2][s81[5]+s81[4]*2+s81[3]*4+s81[2]*8];
	for(i=0;i<8;i++)//8个数变换输出二进制
	{
		for(j=1;j<5;j++)
		{
 		  temp[j]=s[i+1]%2;
		  s[i+1]=s[i+1]/2;
		}
		for(j=1;j<5;j++)
	      f[4*i+j]=temp[5-j];
	}
	for(i=1;i<33;i++)//经过P变换
	  frk[i]=f[P[i-1]];
	for(i=1;i<33;i++)//左右交换
      L2[i]=R1[i];
	for(i=1;i<33;i++)//R2为L1与f(R,K)进行不进位二进制加法运算结果
    {
		R2[i]=L1[i]+frk[i];
		if(R2[i]==2)
          R2[i]=0;
    }
//进行第三次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
	  RE1[i]=R2[E[i-1]];
	for(i=1;i<=48;i++)//与K14按位作不进位加法运算
	  RE1[i]=RE1[i]+K14[i];
	for(i=1;i<=48;i++)
    {
		if(RE1[i]==2)
          RE1[i]=0;
    }
	for(i=1;i<7;i++)//48位分成8组
	{
		s11[i]=RE1[i];
		s21[i]=RE1[i+6];
		s31[i]=RE1[i+12];
		s41[i]=RE1[i+18];
		s51[i]=RE1[i+24];
		s61[i]=RE1[i+30];
		s71[i]=RE1[i+36];
		s81[i]=RE1[i+42];
	}//下面经过S盒,得到8个数
	s[1]=s1[s11[6]+s11[1]*2][s11[5]+s11[4]*2+s11[3]*4+s11[2]*8];
	s[2]=s2[s21[6]+s21[1]*2][s21[5]+s21[4]*2+s21[3]*4+s21[2]*8];
	s[3]=s3[s31[6]+s31[1]*2][s31[5]+s31[4]*2+s31[3]*4+s31[2]*8];
	s[4]=s4[s41[6]+s41[1]*2][s41[5]+s41[4]*2+s41[3]*4+s41[2]*8];
	s[5]=s5[s51[6]+s51[1]*2][s51[5]+s51[4]*2+s51[3]*4+s51[2]*8];
	s[6]=s6[s61[6]+s61[1]*2][s61[5]+s61[4]*2+s61[3]*4+s61[2]*8];
	s[7]=s7[s71[6]+s71[1]*2][s71[5]+s71[4]*2+s71[3]*4+s71[2]*8];
	s[8]=s8[s81[6]+s81[1]*2][s81[5]+s81[4]*2+s81[3]*4+s81[2]*8];
	for(i=0;i<8;i++)//8个数变换输出二进制
	{
		for(j=1;j<5;j++)
		{
 		  temp[j]=s[i+1]%2;
		  s[i+1]=s[i+1]/2;
		}
		for(j=1;j<5;j++)
	      f[4*i+j]=temp[5-j];
	}
	for(i=1;i<33;i++)//经过P变换
	  frk[i]=f[P[i-1]];
	for(i=1;i<33;i++)//左右交换
      L3[i]=R2[i];
	for(i=1;i<33;i++)//R3为L2与f(R,K)进行不进位二进制加法运算结果
    {
		R3[i]=L2[i]+frk[i];
		if(R3[i]==2)
          R3[i]=0;
    }
//进行第四次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
	  RE1[i]=R3[E[i-1]];
	for(i=1;i<=48;i++)//与K13按位作不进位加法运算
	  RE1[i]=RE1[i]+K13[i];
	for(i=1;i<=48;i++)
    {
		if(RE1[i]==2)
          RE1[i]=0;
    }
	for(i=1;i<7;i++)//48位分成8组
	{
		s11[i]=RE1[i];
		s21[i]=RE1[i+6];
		s31[i]=RE1[i+12];
		s41[i]=RE1[i+18];
		s51[i]=RE1[i+24];
		s61[i]=RE1[i+30];
		s71[i]=RE1[i+36];
		s81[i]=RE1[i+42];
	}//下面经过S盒,得到8个数
	s[1]=s1[s11[6]+s11[1]*2][s11[5]+s11[4]*2+s11[3]*4+s11[2]*8];
	s[2]=s2[s21[6]+s21[1]*2][s21[5]+s21[4]*2+s21[3]*4+s21[2]*8];
	s[3]=s3[s31[6]+s31[1]*2][s31[5]+s31[4]*2+s31[3]*4+s31[2]*8];
	s[4]=s4[s41[6]+s41[1]*2][s41[5]+s41[4]*2+s41[3]*4+s41[2]*8];
	s[5]=s5[s51[6]+s51[1]*2][s51[5]+s51[4]*2+s51[3]*4+s51[2]*8];
	s[6]=s6[s61[6]+s61[1]*2][s61[5]+s61[4]*2+s61[3]*4+s61[2]*8];
	s[7]=s7[s71[6]+s71[1]*2][s71[5]+s71[4]*2+s71[3]*4+s71[2]*8];
	s[8]=s8[s81[6]+s81[1]*2][s81[5]+s81[4]*2+s81[3]*4+s81[2]*8];
	for(i=0;i<8;i++)//8个数变换输出二进制
	{
		for(j=1;j<5;j++)
		{
 		  temp[j]=s[i+1]%2;
		  s[i+1]=s[i+1]/2;
		}
		for(j=1;j<5;j++)
	      f[4*i+j]=temp[5-j];
	}
	for(i=1;i<33;i++)//经过P变换
	  frk[i]=f[P[i-1]];
	for(i=1;i<33;i++)//左右交换
      L4[i]=R3[i];
	for(i=1;i<33;i++)//R4为L3与f(R,K)进行不进位二进制加法运算结果
    {
		R4[i]=L3[i]+frk[i];
		if(R4[i]==2)
          R4[i]=0;
    }
//进行第五次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
	  RE1[i]=R4[E[i-1]];
	for(i=1;i<=48;i++)//与K12按位作不进位加法运算
	  RE1[i]=RE1[i]+K12[i];
	for(i=1;i<=48;i++)
    {
		if(RE1[i]==2)
          RE1[i]=0;
    }
	for(i=1;i<7;i++)//48位分成8组
	{
		s11[i]=RE1[i];
		s21[i]=RE1[i+6];
		s31[i]=RE1[i+12];
		s41[i]=RE1[i+18];
		s51[i]=RE1[i+24];
		s61[i]=RE1[i+30];
		s71[i]=RE1[i+36];
		s81[i]=RE1[i+42];
	}//下面经过S盒,得到8个数
	s[1]=s1[s11[6]+s11[1]*2][s11[5]+s11[4]*2+s11[3]*4+s11[2]*8];
	s[2]=s2[s21[6]+s21[1]*2][s21[5]+s21[4]*2+s21[3]*4+s21[2]*8];
	s[3]=s3[s31[6]+s31[1]*2][s31[5]+s31[4]*2+s31[3]*4+s31[2]*8];
	s[4]=s4[s41[6]+s41[1]*2][s41[5]+s41[4]*2+s41[3]*4+s41[2]*8];
	s[5]=s5[s51[6]+s51[1]*2][s51[5]+s51[4]*2+s51[3]*4+s51[2]*8];
	s[6]=s6[s61[6]+s61[1]*2][s61[5]+s61[4]*2+s61[3]*4+s61[2]*8];
	s[7]=s7[s71[6]+s71[1]*2][s71[5]+s71[4]*2+s71[3]*4+s71[2]*8];
	s[8]=s8[s81[6]+s81[1]*2][s81[5]+s81[4]*2+s81[3]*4+s81[2]*8];
	for(i=0;i<8;i++)//8个数变换输出二进制
	{
		for(j=1;j<5;j++)
		{
 		  temp[j]=s[i+1]%2;
		  s[i+1]=s[i+1]/2;
		}
		for(j=1;j<5;j++)
	      f[4*i+j]=temp[5-j];
	}
	for(i=1;i<33;i++)//经过P变换
	  frk[i]=f[P[i-1]];
	for(i=1;i<33;i++)//左右交换
      L5[i]=R4[i];
	for(i=1;i<33;i++)//R5为L4与f(R,K)进行不进位二进制加法运算结果
    {
		R5[i]=L4[i]+frk[i];
		if(R5[i]==2)
          R5[i]=0;
    }
//进行第六次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
	  RE1[i]=R5[E[i-1]];
	for(i=1;i<=48;i++)//与K11按位作不进位加法运算
	  RE1[i]=RE1[i]+K11[i];
	for(i=1;i<=48;i++)
    {
		if(RE1[i]==2)
          RE1[i]=0;
    }
	for(i=1;i<7;i++)//48位分成8组
	{
		s11[i]=RE1[i];
		s21[i]=RE1[i+6];
		s31[i]=RE1[i+12];
		s41[i]=RE1[i+18];
		s51[i]=RE1[i+24];
		s61[i]=RE1[i+30];
		s71[i]=RE1[i+36];
		s81[i]=RE1[i+42];
	}//下面经过S盒,得到8个数
	s[1]=s1[s11[6]+s11[1]*2][s11[5]+s11[4]*2+s11[3]*4+s11[2]*8];
	s[2]=s2[s21[6]+s21[1]*2][s21[5]+s21[4]*2+s21[3]*4+s21[2]*8];
	s[3]=s3[s31[6]+s31[1]*2][s31[5]+s31[4]*2+s31[3]*4+s31[2]*8];
	s[4]=s4[s41[6]+s41[1]*2][s41[5]+s41[4]*2+s41[3]*4+s41[2]*8];
	s[5]=s5[s51[6]+s51[1]*2][s51[5]+s51[4]*2+s51[3]*4+s51[2]*8];
	s[6]=s6[s61[6]+s61[1]*2][s61[5]+s61[4]*2+s61[3]*4+s61[2]*8];
	s[7]=s7[s71[6]+s71[1]*2][s71[5]+s71[4]*2+s71[3]*4+s71[2]*8];
	s[8]=s8[s81[6]+s81[1]*2][s81[5]+s81[4]*2+s81[3]*4+s81[2]*8];
	for(i=0;i<8;i++)//8个数变换输出二进制
	{
		for(j=1;j<5;j++)
		{
 		  temp[j]=s[i+1]%2;
		  s[i+1]=s[i+1]/2;
		}
		for(j=1;j<5;j++)
	      f[4*i+j]=temp[5-j];
	}
	for(i=1;i<33;i++)//经过P变换
	  frk[i]=f[P[i-1]];
	for(i=1;i<33;i++)//左右交换
      L6[i]=R5[i];
	for(i=1;i<33;i++)//R6为L5与f(R,K)进行不进位二进制加法运算结果
    {
		R6[i]=L5[i]+frk[i];
		if(R6[i]==2)
          R6[i]=0;
    }
//进行第七次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
	  RE1[i]=R6[E[i-1]];
	for(i=1;i<=48;i++)//与K10按位作不进位加法运算
	  RE1[i]=RE1[i]+K10[i];
	for(i=1;i<=48;i++)
    {
		if(RE1[i]==2)
          RE1[i]=0;
    }
	for(i=1;i<7;i++)//48位分成8组
	{
		s11[i]=RE1[i];
		s21[i]=RE1[i+6];
		s31[i]=RE1[i+12];
		s41[i]=RE1[i+18];
		s51[i]=RE1[i+24];
		s61[i]=RE1[i+30];
		s71[i]=RE1[i+36];
		s81[i]=RE1[i+42];
	}//下面经过S盒,得到8个数
	s[1]=s1[s11[6]+s11[1]*2][s11[5]+s11[4]*2+s11[3]*4+s11[2]*8];
	s[2]=s2[s21[6]+s21[1]*2][s21[5]+s21[4]*2+s21[3]*4+s21[2]*8];
	s[3]=s3[s31[6]+s31[1]*2][s31[5]+s31[4]*2+s31[3]*4+s31[2]*8];
	s[4]=s4[s41[6]+s41[1]*2][s41[5]+s41[4]*2+s41[3]*4+s41[2]*8];
	s[5]=s5[s51[6]+s51[1]*2][s51[5]+s51[4]*2+s51[3]*4+s51[2]*8];
	s[6]=s6[s61[6]+s61[1]*2][s61[5]+s61[4]*2+s61[3]*4+s61[2]*8];
	s[7]=s7[s71[6]+s71[1]*2][s71[5]+s71[4]*2+s71[3]*4+s71[2]*8];
	s[8]=s8[s81[6]+s81[1]*2][s81[5]+s81[4]*2+s81[3]*4+s81[2]*8];
	for(i=0;i<8;i++)//8个数变换输出二进制
	{
		for(j=1;j<5;j++)
		{
 		  temp[j]=s[i+1]%2;
		  s[i+1]=s[i+1]/2;
		}
		for(j=1;j<5;j++)
	      f[4*i+j]=temp[5-j];
	}
	for(i=1;i<33;i++)//经过P变换
	  frk[i]=f[P[i-1]];
	for(i=1;i<33;i++)//左右交换
      L7[i]=R6[i];
	for(i=1;i<33;i++)//R7为L6与f(R,K)进行不进位二进制加法运算结果
    {
		R7[i]=L6[i]+frk[i];
		if(R7[i]==2)
          R7[i]=0;
    }
//进行第八次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
	  RE1[i]=R7[E[i-1]];
	for(i=1;i<=48;i++)//与K9按位作不进位加法运算
	  RE1[i]=RE1[i]+K9[i];
	for(i=1;i<=48;i++)
    {
		if(RE1[i]==2)
          RE1[i]=0;
    }
	for(i=1;i<7;i++)//48位分成8组
	{
		s11[i]=RE1[i];
		s21[i]=RE1[i+6];
		s31[i]=RE1[i+12];
		s41[i]=RE1[i+18];
		s51[i]=RE1[i+24];
		s61[i]=RE1[i+30];
		s71[i]=RE1[i+36];
		s81[i]=RE1[i+42];
	}//下面经过S盒,得到8个数
	s[1]=s1[s11[6]+s11[1]*2][s11[5]+s11[4]*2+s11[3]*4+s11[2]*8];
	s[2]=s2[s21[6]+s21[1]*2][s21[5]+s21[4]*2+s21[3]*4+s21[2]*8];
	s[3]=s3[s31[6]+s31[1]*2][s31[5]+s31[4]*2+s31[3]*4+s31[2]*8];
	s[4]=s4[s41[6]+s41[1]*2][s41[5]+s41[4]*2+s41[3]*4+s41[2]*8];
	s[5]=s5[s51[6]+s51[1]*2][s51[5]+s51[4]*2+s51[3]*4+s51[2]*8];
	s[6]=s6[s61[6]+s61[1]*2][s61[5]+s61[4]*2+s61[3]*4+s61[2]*8];
	s[7]=s7[s71[6]+s71[1]*2][s71[5]+s71[4]*2+s71[3]*4+s71[2]*8];
	s[8]=s8[s81[6]+s81[1]*2][s81[5]+s81[4]*2+s81[3]*4+s81[2]*8];
	for(i=0;i<8;i++)//8个数变换输出二进制
	{
		for(j=1;j<5;j++)
		{
 		  temp[j]=s[i+1]%2;
		  s[i+1]=s[i+1]/2;
		}
		for(j=1;j<5;j++)
	      f[4*i+j]=temp[5-j];
	}
	for(i=1;i<33;i++)//经过P变换
	  frk[i]=f[P[i-1]];
	for(i=1;i<33;i++)//左右交换
      L8[i]=R7[i];
	for(i=1;i<33;i++)//R8为L7与f(R,K)进行不进位二进制加法运算结果
    {
		R8[i]=L7[i]+frk[i];
		if(R8[i]==2)
          R8[i]=0;
    }
//进行第九次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
	  RE1[i]=R8[E[i-1]];
	for(i=1;i<=48;i++)//与K8按位作不进位加法运算
	  RE1[i]=RE1[i]+K8[i];
	for(i=1;i<=48;i++)
    {
		if(RE1[i]==2)
          RE1[i]=0;
    }
	for(i=1;i<7;i++)//48位分成8组
	{
		s11[i]=RE1[i];
		s21[i]=RE1[i+6];
		s31[i]=RE1[i+12];
		s41[i]=RE1[i+18];
		s51[i]=RE1[i+24];
		s61[i]=RE1[i+30];
		s71[i]=RE1[i+36];
		s81[i]=RE1[i+42];
	}//下面经过S盒,得到8个数
	s[1]=s1[s11[6]+s11[1]*2][s11[5]+s11[4]*2+s11[3]*4+s11[2]*8];
	s[2]=s2[s21[6]+s21[1]*2][s21[5]+s21[4]*2+s21[3]*4+s21[2]*8];
	s[3]=s3[s31[6]+s31[1]*2][s31[5]+s31[4]*2+s31[3]*4+s31[2]*8];
	s[4]=s4[s41[6]+s41[1]*2][s41[5]+s41[4]*2+s41[3]*4+s41[2]*8];
	s[5]=s5[s51[6]+s51[1]*2][s51[5]+s51[4]*2+s51[3]*4+s51[2]*8];
	s[6]=s6[s61[6]+s61[1]*2][s61[5]+s61[4]*2+s61[3]*4+s61[2]*8];
	s[7]=s7[s71[6]+s71[1]*2][s71[5]+s71[4]*2+s71[3]*4+s71[2]*8];
	s[8]=s8[s81[6]+s81[1]*2][s81[5]+s81[4]*2+s81[3]*4+s81[2]*8];
	for(i=0;i<8;i++)//8个数变换输出二进制
	{
		for(j=1;j<5;j++)
		{
 		  temp[j]=s[i+1]%2;
		  s[i+1]=s[i+1]/2;
		}
		for(j=1;j<5;j++)
	      f[4*i+j]=temp[5-j];
	}
	for(i=1;i<33;i++)//经过P变换
	  frk[i]=f[P[i-1]];
	for(i=1;i<33;i++)//左右交换
      L9[i]=R8[i];
	for(i=1;i<33;i++)//R9为L8与f(R,K)进行不进位二进制加法运算结果
    {
		R9[i]=L8[i]+frk[i];
		if(R9[i]==2)
          R9[i]=0;
    }
//进行第十次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
	  RE1[i]=R9[E[i-1]];
	for(i=1;i<=48;i++)//与K7按位作不进位加法运算
	  RE1[i]=RE1[i]+K7[i];
	for(i=1;i<=48;i++)
    {
		if(RE1[i]==2)

⌨️ 快捷键说明

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