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

📄 des.c

📁 本人基于William Stalling的《密码学与网络安全》实现的128位DES加密算法
💻 C
📖 第 1 页 / 共 2 页
字号:
		case 8:
			subkey=&subkey9;
			break;
		case 9:
			subkey=&subkey10;
			break;
		case 10:
			subkey=&subkey11;
			break;
		case 11:
			subkey=&subkey12;
			break;
		case 12:
			subkey=&subkey13;
			break;
		case 13:
			subkey=&subkey14;
			break;
		case 14:
			subkey=&subkey15;
			break;
		case 15:
			subkey=&subkey16;
			break;	
		}

		/*XOR operation with 48-bit subkey*/
		EPbuffer.k0=(EPbuffer.k0)^(subkey->k0);    EPbuffer.k1=(EPbuffer.k1)^(subkey->k1);
		EPbuffer.k2=(EPbuffer.k2)^(subkey->k2);    EPbuffer.k3=(EPbuffer.k3)^(subkey->k3);
		EPbuffer.k4=(EPbuffer.k4)^(subkey->k4);    EPbuffer.k5=(EPbuffer.k5)^(subkey->k5);
		EPbuffer.k6=(EPbuffer.k6)^(subkey->k6);    EPbuffer.k7=(EPbuffer.k7)^(subkey->k7);
		EPbuffer.k8=(EPbuffer.k8)^(subkey->k8);    EPbuffer.k9=(EPbuffer.k9)^(subkey->k9);
		EPbuffer.k10=(EPbuffer.k10)^(subkey->k10); EPbuffer.k11=(EPbuffer.k11)^(subkey->k11);
		EPbuffer.k12=(EPbuffer.k12)^(subkey->k12); EPbuffer.k13=(EPbuffer.k13)^(subkey->k13);
		EPbuffer.k14=(EPbuffer.k14)^(subkey->k14); EPbuffer.k15=(EPbuffer.k15)^(subkey->k15);
		EPbuffer.k16=(EPbuffer.k16)^(subkey->k16); EPbuffer.k17=(EPbuffer.k17)^(subkey->k17);
		EPbuffer.k18=(EPbuffer.k18)^(subkey->k18); EPbuffer.k19=(EPbuffer.k19)^(subkey->k19);
		EPbuffer.k20=(EPbuffer.k20)^(subkey->k20); EPbuffer.k21=(EPbuffer.k21)^(subkey->k21);
		EPbuffer.k22=(EPbuffer.k22)^(subkey->k22); EPbuffer.k23=(EPbuffer.k23)^(subkey->k23);
		EPbuffer.k24=(EPbuffer.k24)^(subkey->k24); EPbuffer.k25=(EPbuffer.k25)^(subkey->k25);
		EPbuffer.k26=(EPbuffer.k26)^(subkey->k26); EPbuffer.k27=(EPbuffer.k27)^(subkey->k27);
		EPbuffer.k28=(EPbuffer.k28)^(subkey->k28); EPbuffer.k29=(EPbuffer.k29)^(subkey->k29);
		EPbuffer.k30=(EPbuffer.k30)^(subkey->k30); EPbuffer.k31=(EPbuffer.k31)^(subkey->k31);
		EPbuffer.k32=(EPbuffer.k32)^(subkey->k32); EPbuffer.k33=(EPbuffer.k33)^(subkey->k33);
		EPbuffer.k34=(EPbuffer.k34)^(subkey->k34); EPbuffer.k35=(EPbuffer.k35)^(subkey->k35);
		EPbuffer.k36=(EPbuffer.k36)^(subkey->k36); EPbuffer.k37=(EPbuffer.k37)^(subkey->k37);
		EPbuffer.k38=(EPbuffer.k38)^(subkey->k38); EPbuffer.k39=(EPbuffer.k39)^(subkey->k39);
		EPbuffer.k40=(EPbuffer.k40)^(subkey->k40); EPbuffer.k41=(EPbuffer.k41)^(subkey->k41);
		EPbuffer.k42=(EPbuffer.k42)^(subkey->k42); EPbuffer.k43=(EPbuffer.k43)^(subkey->k43);
		EPbuffer.k44=(EPbuffer.k44)^(subkey->k44); EPbuffer.k45=(EPbuffer.k45)^(subkey->k45);
		EPbuffer.k46=(EPbuffer.k46)^(subkey->k46); EPbuffer.k47=(EPbuffer.k47)^(subkey->k47);

		/*Fetch data from S-Boxes*/
		row.bit0=EPbuffer.k5; row.bit1=EPbuffer.k0;
		col.bit0=EPbuffer.k4; col.bit1=EPbuffer.k3; 
		col.bit2=EPbuffer.k2; col.bit3=EPbuffer.k1;
		pbluebuffer->block0=temp4L.block=S1[prow->block][pcol->block];
		rightpart->bit0=ptemp4S->bit3; rightpart->bit1=ptemp4S->bit2;
		rightpart->bit2=ptemp4S->bit1; rightpart->bit3=ptemp4S->bit0;

		row.bit0=EPbuffer.k11; row.bit1=EPbuffer.k6;
		col.bit0=EPbuffer.k10; col.bit1=EPbuffer.k9; 
		col.bit2=EPbuffer.k8; col.bit3=EPbuffer.k7;
		pbluebuffer->block1=temp4L.block=S2[prow->block][pcol->block];
		rightpart->bit4=ptemp4S->bit3;  rightpart->bit5=ptemp4S->bit2;
		rightpart->bit6=ptemp4S->bit1;  rightpart->bit7=ptemp4S->bit0;

		row.bit0=EPbuffer.k17; row.bit1=EPbuffer.k12;
		col.bit0=EPbuffer.k16; col.bit1=EPbuffer.k15; 
		col.bit2=EPbuffer.k14; col.bit3=EPbuffer.k13;
		pbluebuffer->block2=temp4L.block=S3[prow->block][pcol->block];
		rightpart->bit8=ptemp4S->bit3;  rightpart->bit9=ptemp4S->bit2;
		rightpart->bit10=ptemp4S->bit1; rightpart->bit11=ptemp4S->bit0;

		row.bit0=EPbuffer.k23; row.bit1=EPbuffer.k18;
		col.bit0=EPbuffer.k22; col.bit1=EPbuffer.k21; 
		col.bit2=EPbuffer.k20; col.bit3=EPbuffer.k19;
		pbluebuffer->block3=temp4L.block=S4[prow->block][pcol->block];
		rightpart->bit12=ptemp4S->bit3; rightpart->bit13=ptemp4S->bit2;
		rightpart->bit14=ptemp4S->bit1; rightpart->bit15=ptemp4S->bit0;

		row.bit0=EPbuffer.k29; row.bit1=EPbuffer.k24;
		col.bit0=EPbuffer.k28; col.bit1=EPbuffer.k27; 
		col.bit2=EPbuffer.k26; col.bit3=EPbuffer.k25;
		pbluebuffer->block4=temp4L.block=S5[prow->block][pcol->block];
		rightpart->bit16=ptemp4S->bit3; rightpart->bit17=ptemp4S->bit2;
		rightpart->bit18=ptemp4S->bit1; rightpart->bit19=ptemp4S->bit0;

		row.bit0=EPbuffer.k35; row.bit1=EPbuffer.k30;
		col.bit0=EPbuffer.k34; col.bit1=EPbuffer.k33; 
		col.bit2=EPbuffer.k32; col.bit3=EPbuffer.k31;
		pbluebuffer->block5=temp4L.block=S6[prow->block][pcol->block];
		rightpart->bit20=ptemp4S->bit3; rightpart->bit21=ptemp4S->bit2;
		rightpart->bit22=ptemp4S->bit1; rightpart->bit23=ptemp4S->bit0;

		row.bit0=EPbuffer.k41; row.bit1=EPbuffer.k36;
		col.bit0=EPbuffer.k40; col.bit1=EPbuffer.k39; 
		col.bit2=EPbuffer.k38; col.bit3=EPbuffer.k37;
		pbluebuffer->block6=temp4L.block=S7[prow->block][pcol->block];
		rightpart->bit24=ptemp4S->bit3; rightpart->bit25=ptemp4S->bit2;
		rightpart->bit26=ptemp4S->bit1; rightpart->bit27=ptemp4S->bit0;

		row.bit0=EPbuffer.k47; row.bit1=EPbuffer.k42;
		col.bit0=EPbuffer.k46; col.bit1=EPbuffer.k45; 
		col.bit2=EPbuffer.k44; col.bit3=EPbuffer.k43;
		pbluebuffer->block7=temp4L.block=S8[prow->block][pcol->block];
		rightpart->bit28=ptemp4S->bit3; rightpart->bit29=ptemp4S->bit2;
		rightpart->bit30=ptemp4S->bit1; rightpart->bit31=ptemp4S->bit0;

		/*Permutation*/
		for(i=0;i<4;i++)
		{
			temp1[i]=bluebuffer[i];
		}
		rightpart->bit0=ptemp1->bit15;  rightpart->bit1=ptemp1->bit6;
		rightpart->bit2=ptemp1->bit19;  rightpart->bit3=ptemp1->bit20;
		rightpart->bit4=ptemp1->bit28;  rightpart->bit5=ptemp1->bit11;
		rightpart->bit6=ptemp1->bit27;  rightpart->bit7=ptemp1->bit16;
		rightpart->bit8=ptemp1->bit0;   rightpart->bit9=ptemp1->bit14;
		rightpart->bit10=ptemp1->bit22; rightpart->bit11=ptemp1->bit25;
		rightpart->bit12=ptemp1->bit4;  rightpart->bit13=ptemp1->bit17;
		rightpart->bit14=ptemp1->bit30; rightpart->bit15=ptemp1->bit9;
		rightpart->bit16=ptemp1->bit1;  rightpart->bit17=ptemp1->bit7;
		rightpart->bit18=ptemp1->bit23; rightpart->bit19=ptemp1->bit13;
		rightpart->bit20=ptemp1->bit31; rightpart->bit21=ptemp1->bit26;
		rightpart->bit22=ptemp1->bit2;  rightpart->bit23=ptemp1->bit8;
		rightpart->bit24=ptemp1->bit18; rightpart->bit25=ptemp1->bit12;
		rightpart->bit26=ptemp1->bit29; rightpart->bit27=ptemp1->bit5;
		rightpart->bit28=ptemp1->bit21; rightpart->bit29=ptemp1->bit10;
		rightpart->bit30=ptemp1->bit3;  rightpart->bit31=ptemp1->bit24;

		/*XOR orperation*/
		rightpart1->block=(rightpart1->block)^(leftpart->block);

		/*Copy data to proper place*/
		for(i=0;i<4;i++)
		{
			redbuffer[i]=temp[i];
		}

		/*Merge the two parts together*/
		for(i=0;i<4;i++)
		{
			buffer[i]=bluebuffer[i];
			buffer[i+4]=redbuffer[i];
		}

		/*Inverse initial permutation*/
		for(i=0;i<8;i++)
		{
			tempbuffer[i]=buffer[i];
		}
		pbuffer->bit0=ptempbuffer->bit39; pbuffer->bit1=ptempbuffer->bit7;
		pbuffer->bit2=ptempbuffer->bit47; pbuffer->bit3=ptempbuffer->bit15;
		pbuffer->bit4=ptempbuffer->bit55; pbuffer->bit5=ptempbuffer->bit23;
		pbuffer->bit6=ptempbuffer->bit63; pbuffer->bit7=ptempbuffer->bit31;
		pbuffer->bit8=ptempbuffer->bit38; pbuffer->bit9=ptempbuffer->bit6;
		pbuffer->bit10=ptempbuffer->bit46;pbuffer->bit11=ptempbuffer->bit14;
		pbuffer->bit12=ptempbuffer->bit54;pbuffer->bit13=ptempbuffer->bit22;
		pbuffer->bit14=ptempbuffer->bit62;pbuffer->bit15=ptempbuffer->bit30;
		pbuffer->bit16=ptempbuffer->bit37;pbuffer->bit17=ptempbuffer->bit5;
		pbuffer->bit18=ptempbuffer->bit45;pbuffer->bit19=ptempbuffer->bit13;
		pbuffer->bit20=ptempbuffer->bit53;pbuffer->bit21=ptempbuffer->bit21;
		pbuffer->bit22=ptempbuffer->bit61;pbuffer->bit23=ptempbuffer->bit29;
		pbuffer->bit24=ptempbuffer->bit36;pbuffer->bit25=ptempbuffer->bit4;
		pbuffer->bit26=ptempbuffer->bit44;pbuffer->bit27=ptempbuffer->bit12;
		pbuffer->bit28=ptempbuffer->bit52;pbuffer->bit29=ptempbuffer->bit20;
		pbuffer->bit30=ptempbuffer->bit60;pbuffer->bit31=ptempbuffer->bit28;
		pbuffer->bit32=ptempbuffer->bit35;pbuffer->bit33=ptempbuffer->bit3;
		pbuffer->bit34=ptempbuffer->bit43;pbuffer->bit35=ptempbuffer->bit11;
		pbuffer->bit36=ptempbuffer->bit51;pbuffer->bit37=ptempbuffer->bit19;
		pbuffer->bit38=ptempbuffer->bit59;pbuffer->bit39=ptempbuffer->bit27;
		pbuffer->bit40=ptempbuffer->bit34;pbuffer->bit41=ptempbuffer->bit2;
		pbuffer->bit42=ptempbuffer->bit42;pbuffer->bit43=ptempbuffer->bit10;
		pbuffer->bit44=ptempbuffer->bit50;pbuffer->bit45=ptempbuffer->bit18;
		pbuffer->bit46=ptempbuffer->bit58;pbuffer->bit47=ptempbuffer->bit26;
		pbuffer->bit48=ptempbuffer->bit33;pbuffer->bit49=ptempbuffer->bit1;
		pbuffer->bit50=ptempbuffer->bit41;pbuffer->bit51=ptempbuffer->bit9;
		pbuffer->bit52=ptempbuffer->bit49;pbuffer->bit53=ptempbuffer->bit17;
		pbuffer->bit54=ptempbuffer->bit57;pbuffer->bit55=ptempbuffer->bit25;
		pbuffer->bit56=ptempbuffer->bit32;pbuffer->bit57=ptempbuffer->bit0;
		pbuffer->bit58=ptempbuffer->bit40;pbuffer->bit59=ptempbuffer->bit8;
		pbuffer->bit60=ptempbuffer->bit48;pbuffer->bit61=ptempbuffer->bit16;
		pbuffer->bit62=ptempbuffer->bit56;pbuffer->bit63=ptempbuffer->bit24;

		/*Recover plaintext data into charactors*/
		for(i=0;i<8;i++)
		{
			tempbuffer[i]=buffer[i];
		}
		pbuffer->bit0=ptempbuffer->bit7;  pbuffer->bit1=ptempbuffer->bit6;
		pbuffer->bit2=ptempbuffer->bit5;  pbuffer->bit3=ptempbuffer->bit4;
		pbuffer->bit4=ptempbuffer->bit3;  pbuffer->bit5=ptempbuffer->bit2;
		pbuffer->bit6=ptempbuffer->bit1;  pbuffer->bit7=ptempbuffer->bit0;
		pbuffer->bit8=ptempbuffer->bit15; pbuffer->bit9=ptempbuffer->bit14;
		pbuffer->bit10=ptempbuffer->bit13;pbuffer->bit11=ptempbuffer->bit12;
		pbuffer->bit12=ptempbuffer->bit11;pbuffer->bit13=ptempbuffer->bit10;
		pbuffer->bit14=ptempbuffer->bit9; pbuffer->bit15=ptempbuffer->bit8;
		pbuffer->bit16=ptempbuffer->bit23;pbuffer->bit17=ptempbuffer->bit22;
		pbuffer->bit18=ptempbuffer->bit21;pbuffer->bit19=ptempbuffer->bit20;
		pbuffer->bit20=ptempbuffer->bit19;pbuffer->bit21=ptempbuffer->bit18;
		pbuffer->bit22=ptempbuffer->bit17;pbuffer->bit23=ptempbuffer->bit16;
		pbuffer->bit24=ptempbuffer->bit31;pbuffer->bit25=ptempbuffer->bit30;
		pbuffer->bit26=ptempbuffer->bit29;pbuffer->bit27=ptempbuffer->bit28;
		pbuffer->bit28=ptempbuffer->bit27;pbuffer->bit29=ptempbuffer->bit26;
		pbuffer->bit30=ptempbuffer->bit25;pbuffer->bit31=ptempbuffer->bit24;
		pbuffer->bit32=ptempbuffer->bit39;pbuffer->bit33=ptempbuffer->bit38;
		pbuffer->bit34=ptempbuffer->bit37;pbuffer->bit35=ptempbuffer->bit36;
		pbuffer->bit36=ptempbuffer->bit35;pbuffer->bit37=ptempbuffer->bit34;
		pbuffer->bit38=ptempbuffer->bit33;pbuffer->bit39=ptempbuffer->bit32;
		pbuffer->bit40=ptempbuffer->bit47;pbuffer->bit41=ptempbuffer->bit46;
		pbuffer->bit42=ptempbuffer->bit45;pbuffer->bit43=ptempbuffer->bit44;
		pbuffer->bit44=ptempbuffer->bit43;pbuffer->bit45=ptempbuffer->bit42;
		pbuffer->bit46=ptempbuffer->bit41;pbuffer->bit47=ptempbuffer->bit40;
		pbuffer->bit48=ptempbuffer->bit55;pbuffer->bit49=ptempbuffer->bit54;
		pbuffer->bit50=ptempbuffer->bit53;pbuffer->bit51=ptempbuffer->bit52;
		pbuffer->bit52=ptempbuffer->bit51;pbuffer->bit53=ptempbuffer->bit50;
		pbuffer->bit54=ptempbuffer->bit49;pbuffer->bit55=ptempbuffer->bit48;
		pbuffer->bit56=ptempbuffer->bit63;pbuffer->bit57=ptempbuffer->bit62;
		pbuffer->bit58=ptempbuffer->bit61;pbuffer->bit59=ptempbuffer->bit60;
		pbuffer->bit60=ptempbuffer->bit59;pbuffer->bit61=ptempbuffer->bit58;
		pbuffer->bit62=ptempbuffer->bit57;pbuffer->bit63=ptempbuffer->bit56;
	}

	return 0;
}

⌨️ 快捷键说明

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