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

📄 desdlg.cpp

📁 DES加密程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		for(k=0;k<32;k++)
		{
			if(L[i][k]==tmp1[k])
				R[i+1][k]=0;
			else
				R[i+1][k]=1;
		}
		for(k=0;k<32;k++)
		{
			L[i+1][k]=R[i][k];
		}
		for(k=0;k<32;k++)
		{
			out[k]=L[16][k];
		}
		for(k=32;k<64;k++)
		{
			out[k]=R[16][k];
		}
	}
	data[57]=out[0];                //逆初始置换
	data[49]=out[1];
	data[41]=out[2];
	data[33]=out[3];
	data[25]=out[4];
	data[17]=out[5];
	data[9]=out[6];
	data[1]=out[7];
	data[59]=out[8];
	data[51]=out[9];
	data[43]=out[10];
	data[35]=out[11];
	data[27]=out[12];
	data[19]=out[13];
	data[11]=out[14];
	data[3]=out[15];
	data[61]=out[16];
	data[53]=out[17];
	data[45]=out[18];
	data[37]=out[19];
	data[29]=out[20];
	data[21]=out[21];
	data[13]=out[22];
	data[4]=out[23];
	data[63]=out[24];
	data[55]=out[25];
	data[47]=out[26];
	data[39]=out[27];
	data[31]=out[28];
	data[23]=out[29];
	data[15]=out[30];
	data[7]=out[31];
	data[56]=out[32];
	data[48]=out[33];
	data[40]=out[34];
	data[32]=out[35];
	data[24]=out[36];
	data[16]=out[37];
	data[8]=out[38];
	data[0]=out[39];
	data[58]=out[40];
	data[50]=out[41];
	data[42]=out[42];
	data[34]=out[43];
	data[26]=out[44];
	data[18]=out[45];
	data[10]=out[46];
	data[2]=out[47];
	data[60]=out[48];
	data[52]=out[49];
	data[44]=out[50];
	data[36]=out[51];
	data[28]=out[52];
	data[20]=out[53];
	data[12]=out[54];
	data[4]=out[55];
	data[62]=out[56];
	data[54]=out[57];
	data[46]=out[58];
	data[38]=out[59];
	data[30]=out[60];
	data[22]=out[61];
	data[14]=out[62];
	data[6]=out[63];
	for(i=0;i<64;i++)
	{
		if(data[i]==1)
			C[i]='1';
		else
			C[i]='0';
	}
	this->SetDlgItemText(IDC_Ciphertext,C);
}

void CDESDlg::OnDecryption() 
{
	// TODO: Add your control notification handler code here
		UpdateData(TRUE);
	int k,i,g,j,x,y;
	int L[17][32],R[17][32],R1[16][8];
	int keyT[56],keys[16][56],K[16][48];
	int B[8],tmp[32],tmp1[32],out[64],data[64];
	char C[8];
	int a[64]={0};
	int S[8][4][16]={{{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}}};
	for(k=0;k<8;k++)
	{
		g = m_Key[k];
		j=0;
	    for(i=8*k+6;i>8*k;i--)
		{
			a[i] = g%2;
			if(a[i]==1)j++;
			g /= 2;
		}
		if(j%2==0)
			a[8*k+7]=1;
		else
			a[8*k+7]=0;
	}
	keyT[0] = a[56];
	keyT[1] = a[48];
	keyT[2] = a[40];
	keyT[3] = a[32];
	keyT[4] = a[24];
	keyT[5] = a[16];
	keyT[6] = a[8];
	keyT[7] = a[0];
	keyT[8] = a[57];
	keyT[9] = a[49];
	keyT[10] = a[41];
	keyT[11] = a[33];
	keyT[12] = a[25];
	keyT[13] = a[17];
	keyT[14] = a[9];
	keyT[15] = a[1];
	keyT[16] = a[58];
	keyT[17] = a[50];
	keyT[18] = a[42];
	keyT[19] = a[34];
	keyT[20] = a[26];
	keyT[21] = a[18];
	keyT[22] = a[10];
	keyT[23] = a[2];
	keyT[24] = a[59];
	keyT[25] = a[51];
	keyT[26] = a[43];
	keyT[27] = a[35];
	keyT[28] = a[64];
	keyT[29] = a[54];
	keyT[30] = a[46];
	keyT[31] = a[38];
	keyT[32] = a[30];
	keyT[33] = a[22];
	keyT[34] = a[14];
	keyT[35] = a[6];
	keyT[36] = a[61];
	keyT[37] = a[53];
	keyT[38] = a[45];
	keyT[39] = a[37];
	keyT[40] = a[29];
	keyT[41] = a[21];
	keyT[42] = a[13];
	keyT[43] = a[5];
	keyT[44] = a[60];
	keyT[45] = a[52];
	keyT[46] = a[44];
	keyT[47] = a[36];
	keyT[48] = a[28];
	keyT[49] = a[20];
	keyT[50] = a[12];
	keyT[51] = a[4];
	keyT[52] = a[27];
	keyT[53] = a[19];
	keyT[54] = a[11];
	keyT[55] = a[3];
	for(i=0;i<28;i++)
	{
		keys[0][i] = keyT[((i-1)+28)%28];
	}
	for(i=28;i<55;i++)
	{
		keys[0][i] = keyT[(i-1)%28+28];
	}
	for(i=0;i<28;i++)
	{
		keys[1][i] = keys[0][((i-1)+28)%28];
	}
	for(i=28;i<55;i++)
	{
		keys[1][i] = keys[0][(i-1)%28+28];
	}
	for(k=2;k<8;k++)
	{
		for(i=0;i<28;i++)
		{
			keys[k][i]=keys[k-1][((i-2)+28)%28];
		}
		for(i=28;i<55;i++)
		{
			keys[k][i]=keys[k-1][(i-2)%28+28];
		}
	}
	for(i=0;i<28;i++)
	{
		keys[8][i] = keys[7][((i-1)+28)%28];
	}
	for(i=28;i<55;i++)
	{
		keys[8][i] = keys[7][(i-1)%28+28];
	}
	for(k=9;k<15;k++)
	{
		for(i=0;i<28;i++)
		{
			keys[k][i]=keys[k-1][((i-2)+28)%28];
		}
		for(i=28;i<55;i++)
		{
			keys[k][i]=keys[k-1][(i-2)%28+28];
		}
	}
	for(i=0;i<28;i++)
	{
		keys[15][i] = keys[14][((i-1)+28)%28];
	}
	for(i=28;i<55;i++)
	{
		keys[15][i] = keys[14][(i-1)%28+28];
	}
	for(k=0;k<16;k++)
	{
		K[k][0]=keys[k][13];
		K[k][1]=keys[k][16];
		K[k][2]=keys[k][10];
		K[k][3]=keys[k][23];
		K[k][4]=keys[k][0];
		K[k][5]=keys[k][4];
		K[k][6]=keys[k][2];
		K[k][7]=keys[k][27];
		K[k][8]=keys[k][14];
		K[k][9]=keys[k][5];
		K[k][10]=keys[k][20];
		K[k][11]=keys[k][9];
		K[k][12]=keys[k][22];
		K[k][13]=keys[k][18];
		K[k][14]=keys[k][11];
		K[k][15]=keys[k][3];
		K[k][16]=keys[k][25];
		K[k][17]=keys[k][7];
		K[k][18]=keys[k][15];
		K[k][19]=keys[k][6];
		K[k][20]=keys[k][26];
		K[k][21]=keys[k][19];
		K[k][22]=keys[k][12];
		K[k][23]=keys[k][1];
		K[k][24]=keys[k][40];
		K[k][25]=keys[k][51];
		K[k][26]=keys[k][30];
		K[k][27]=keys[k][36];
		K[k][28]=keys[k][46];
		K[k][29]=keys[k][54];
		K[k][30]=keys[k][29];
		K[k][31]=keys[k][39];
		K[k][32]=keys[k][50];
		K[k][33]=keys[k][44];
		K[k][34]=keys[k][32];
		K[k][35]=keys[k][47];
		K[k][36]=keys[k][43];
		K[k][37]=keys[k][48];
		K[k][38]=keys[k][38];
		K[k][39]=keys[k][55];
		K[k][40]=keys[k][33];
		K[k][41]=keys[k][52];
		K[k][42]=keys[k][45];
		K[k][43]=keys[k][41];
		K[k][44]=keys[k][49];
		K[k][45]=keys[k][35];
		K[k][46]=keys[k][28];
		K[k][47]=keys[k][31];
	}

	for(k=0;k<64;k++)
	{
		if(m_Ciphertext[k]=='1')
			a[k]=1;
		else
			a[k]=0;
	}
	L[0][0]=a[57];
	L[0][1]=a[49];
	L[0][2]=a[41];
	L[0][3]=a[33];
	L[0][4]=a[25];
	L[0][5]=a[17];
	L[0][6]=a[9];
	L[0][7]=a[1];
	L[0][8]=a[59];
	L[0][9]=a[51];
	L[0][10]=a[43];
	L[0][11]=a[35];
	L[0][12]=a[27];
	L[0][13]=a[19];
	L[0][14]=a[11];
	L[0][15]=a[3];
	L[0][16]=a[61];
	L[0][17]=a[53];
	L[0][18]=a[45];
	L[0][19]=a[37];
	L[0][20]=a[29];
	L[0][21]=a[21];
	L[0][22]=a[13];
	L[0][23]=a[5];
	L[0][24]=a[63];
	L[0][25]=a[55];
	L[0][26]=a[47];
	L[0][27]=a[39];
	L[0][28]=a[31];
	L[0][29]=a[23];
	L[0][30]=a[15];
	L[0][31]=a[7];
	R[0][0]=a[56];
	R[0][1]=a[48];
	R[0][2]=a[40];
	R[0][3]=a[32];
	R[0][4]=a[24];
	R[0][5]=a[16];
	R[0][6]=a[8];
	R[0][7]=a[0];
	R[0][8]=a[58];
	R[0][9]=a[50];
	R[0][10]=a[42];
	R[0][11]=a[34];
	R[0][12]=a[26];
	R[0][13]=a[18];
	R[0][14]=a[10];
	R[0][15]=a[2];
	R[0][16]=a[60];
	R[0][17]=a[52];
	R[0][18]=a[44];
	R[0][19]=a[36];
	R[0][20]=a[28];
	R[0][21]=a[20];
	R[0][22]=a[12];
	R[0][23]=a[4];
	R[0][24]=a[62];
	R[0][25]=a[54];
	R[0][26]=a[46];
	R[0][27]=a[38];
	R[0][28]=a[30];
	R[0][29]=a[22];
	R[0][30]=a[14];
	R[0][31]=a[6];
	for(i=0;i<16;i++)
	{
		R1[i][0]=R[i][31];
		R1[i][1]=R[i][0];
		R1[i][2]=R[i][1];
		R1[i][3]=R[i][2];
		R1[i][4]=R[i][3];
		R1[i][5]=R[i][4];
		R1[i][6]=R[i][3];
		R1[i][7]=R[i][4];
		R1[i][8]=R[i][5];
		R1[i][9]=R[i][6];
		R1[i][10]=R[i][7];
		R1[i][11]=R[i][8];
		R1[i][12]=R[i][7];
		R1[i][13]=R[i][8];
		R1[i][14]=R[i][9];
		R1[i][15]=R[i][10];
		R1[i][16]=R[i][11];
		R1[i][17]=R[i][12];
		R1[i][18]=R[i][11];
		R1[i][19]=R[i][12];
		R1[i][20]=R[i][13];
		R1[i][21]=R[i][14];
		R1[i][22]=R[i][15];
		R1[i][23]=R[i][16];
		R1[i][24]=R[i][15];
		R1[i][25]=R[i][16];
		R1[i][26]=R[i][17];
		R1[i][27]=R[i][18];
		R1[i][28]=R[i][19];
		R1[i][29]=R[i][20];
		R1[i][30]=R[i][19];
		R1[i][31]=R[i][20];
		R1[i][32]=R[i][21];
		R1[i][33]=R[i][22];
		R1[i][34]=R[i][23];
		R1[i][35]=R[i][24];
		R1[i][36]=R[i][23];
		R1[i][37]=R[i][24];
		R1[i][38]=R[i][25];
		R1[i][39]=R[i][26];
		R1[i][40]=R[i][27];
		R1[i][41]=R[i][28];
		R1[i][42]=R[i][27];
		R1[i][43]=R[i][28];
		R1[i][44]=R[i][29];
		R1[i][45]=R[i][30];
		R1[i][46]=R[i][31];
		R1[i][47]=R[i][0];
		for(j=0;j<48;j++)
		{
			if(R1[i][j]==K[15-i][j])
				R1[i][j]=0;
			else
				R1[i][j]=1;
		}
		for(k=0;k<8;k++)
		{
			x=2*R1[i][6*k]+R1[i][6*k+5];
			y=8*R1[i][6*k+1]+4*R1[i][6*k+2]+2*R1[i][6*k+3]+R1[i][6*k+4];
			B[k]=S[k][x][y];
		}
		for(k=0;k<8;k++)
		{
			g=B[k];
			for(j=4*k+4;j>4*j;j--)
			{
				tmp[j]=g%2;
				g/=2;
			}
			tmp1[0]=tmp[15];
			tmp1[1]=tmp[6];
			tmp1[2]=tmp[19];
			tmp1[3]=tmp[20];
			tmp1[4]=tmp[28];
			tmp1[5]=tmp[11];
			tmp1[6]=tmp[27];
			tmp1[7]=tmp[16];
			tmp1[8]=tmp[0];
			tmp1[9]=tmp[14];
			tmp1[10]=tmp[22];
			tmp1[11]=tmp[25];
			tmp1[12]=tmp[4];
			tmp1[13]=tmp[17];
			tmp1[14]=tmp[30];
			tmp1[15]=tmp[9];
			tmp1[16]=tmp[1];
			tmp1[17]=tmp[7];
			tmp1[18]=tmp[23];
			tmp1[19]=tmp[13];
			tmp1[20]=tmp[31];
			tmp1[21]=tmp[26];
			tmp1[22]=tmp[2];
			tmp1[23]=tmp[8];
			tmp1[24]=tmp[18];
			tmp1[25]=tmp[12];
			tmp1[26]=tmp[29];
			tmp1[27]=tmp[5];
			tmp1[28]=tmp[21];
			tmp1[29]=tmp[10];
			tmp1[30]=tmp[3];
			tmp1[31]=tmp[24];
		}
		for(k=0;k<32;k++)
		{
			if(L[i][k]==tmp1[k])
				R[i+1][k]=0;
			else
				R[i+1][k]=1;
		}
		for(k=0;k<32;k++)
		{
			L[i+1][k]=R[i][k];
		}
		for(k=0;k<32;k++)
		{
			out[k]=L[16][k];
		}
		for(k=32;k<64;k++)
		{
			out[k]=R[16][k];
		}
	}
	data[57]=out[0];
	data[49]=out[1];
	data[41]=out[2];
	data[33]=out[3];
	data[25]=out[4];
	data[17]=out[5];
	data[9]=out[6];
	data[1]=out[7];
	data[59]=out[8];
	data[51]=out[9];
	data[43]=out[10];
	data[35]=out[11];
	data[27]=out[12];
	data[19]=out[13];
	data[11]=out[14];
	data[3]=out[15];
	data[61]=out[16];
	data[53]=out[17];
	data[45]=out[18];
	data[37]=out[19];
	data[29]=out[20];
	data[21]=out[21];
	data[13]=out[22];
	data[4]=out[23];
	data[63]=out[24];
	data[55]=out[25];
	data[47]=out[26];
	data[39]=out[27];
	data[31]=out[28];
	data[23]=out[29];
	data[15]=out[30];
	data[7]=out[31];
	data[56]=out[32];
	data[48]=out[33];
	data[40]=out[34];
	data[32]=out[35];
	data[24]=out[36];
	data[16]=out[37];
	data[8]=out[38];
	data[0]=out[39];
	data[58]=out[40];
	data[50]=out[41];
	data[42]=out[42];
	data[34]=out[43];
	data[26]=out[44];
	data[18]=out[45];
	data[10]=out[46];
	data[2]=out[47];
	data[60]=out[48];
	data[52]=out[49];
	data[44]=out[50];
	data[36]=out[51];
	data[28]=out[52];
	data[20]=out[53];
	data[12]=out[54];
	data[4]=out[55];
	data[62]=out[56];
	data[54]=out[57];
	data[46]=out[58];
	data[38]=out[59];
	data[30]=out[60];
	data[22]=out[61];
	data[14]=out[62];
	data[6]=out[63];
	for(k=0;k<8;k++)
	{
		C[k]=64*data[8*k]+32*data[8*k+1]+16*data[8*k+2]+8*data[8*k+3]+4*data[8*k+4]+2*data[8*k+5]+data[8*k+6];
	}
	this->SetDlgItemText(IDC_Plaintext,C);
}

⌨️ 快捷键说明

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