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

📄 work.cpp

📁 DES加密的完整性分析
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			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<33;i++)
	{
		fputc(L1[i]+'0',fp);
	}
	for(i=1;i<33;i++)
	{
		fputc(R1[i]+'0',fp);
	}
	//进行第二次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
		RE1[i]=R1[E[i-1]];
	for(i=1;i<=48;i++)//与K2按位作不进位加法运算
		RE1[i]=RE1[i]+K2[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<33;i++)
	{
		fputc(L2[i]+'0',fp);
	}
	for(i=1;i<33;i++)
	{
		fputc(R2[i]+'0',fp);
	}
	//进行第三次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
		RE1[i]=R2[E[i-1]];
	for(i=1;i<=48;i++)//与K3按位作不进位加法运算
		RE1[i]=RE1[i]+K3[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<33;i++)
	{
		fputc(L3[i]+'0',fp);
	}
	for(i=1;i<33;i++)
	{
		fputc(R3[i]+'0',fp);
	}
	//进行第四次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
		RE1[i]=R3[E[i-1]];
	for(i=1;i<=48;i++)//与K4按位作不进位加法运算
		RE1[i]=RE1[i]+K4[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<33;i++)
	{
		fputc(L4[i]+'0',fp);
	}
	for(i=1;i<33;i++)
	{
		fputc(R4[i]+'0',fp);
	}
	//进行第五次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
		RE1[i]=R4[E[i-1]];
	for(i=1;i<=48;i++)//与K5按位作不进位加法运算
		RE1[i]=RE1[i]+K5[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<33;i++)
	{
		fputc(L5[i]+'0',fp);
	}
	for(i=1;i<33;i++)
	{
		fputc(R5[i]+'0',fp);
	}
	//进行第六次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
		RE1[i]=R5[E[i-1]];
	for(i=1;i<=48;i++)//与K6按位作不进位加法运算
		RE1[i]=RE1[i]+K6[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<33;i++)
	{
		fputc(L6[i]+'0',fp);
	}
	for(i=1;i<33;i++)
	{
		fputc(R6[i]+'0',fp);
	}
	//进行第七次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
		RE1[i]=R6[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)
			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<33;i++)
	{
		fputc(L7[i]+'0',fp);
	}
	for(i=1;i<33;i++)
	{
		fputc(R7[i]+'0',fp);
	}
	//进行第八次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
		RE1[i]=R7[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++)//左右交换
		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<33;i++)
	{
		fputc(L8[i]+'0',fp);
	}
	for(i=1;i<33;i++)
	{
		fputc(R8[i]+'0',fp);
	}
	//进行第九次迭代
	for(i=1;i<=48;i++)//经过E变换扩充,由32位变为48位
		RE1[i]=R8[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;
    }

⌨️ 快捷键说明

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