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

📄 key_gen.c

📁 本人基于William Stalling的《密码学与网络安全》实现的128位DES加密算法
💻 C
📖 第 1 页 / 共 4 页
字号:
//////////////////////////////////////////////////////////////////////////////
//						**************************							//
//						*Data Encryption Standard*							//
//						**************************							//
//																			//
//								Realized in C								//
//																			//
//								*************								//
//								*Constructed*								//
//								*     By    *								//
//								*           *								//
//								*Xie Xingwei*								//
//								*************								//
//																			//
//	If you have any question about my code,contact me with E-mail please	//
//																			//
//						xiexingwei_2008@hotmail.com							//
//////////////////////////////////////////////////////////////////////////////

#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <stdio.h>
#include "key_gen.h"
#include "data_struct.h"

/*16 48-bit subkeys*/
struct SUBKEYSTRUCT subkey1;
struct SUBKEYSTRUCT subkey2;
struct SUBKEYSTRUCT subkey3;
struct SUBKEYSTRUCT subkey4;
struct SUBKEYSTRUCT subkey5;
struct SUBKEYSTRUCT subkey6;
struct SUBKEYSTRUCT subkey7;
struct SUBKEYSTRUCT subkey8;
struct SUBKEYSTRUCT subkey9;
struct SUBKEYSTRUCT subkey10;
struct SUBKEYSTRUCT subkey11;
struct SUBKEYSTRUCT subkey12;
struct SUBKEYSTRUCT subkey13;
struct SUBKEYSTRUCT subkey14;
struct SUBKEYSTRUCT subkey15;
struct SUBKEYSTRUCT subkey16;

int key_gen()
{
	int fh;  /*Handle of the file "key"*/

	struct KEYSTRUCT tempkey;

    unsigned char buffer[8];

	struct KEYSTRUCT *key;/*Original 64-bit key*/
	struct KEYSTRUCT tempkey1;
	unsigned templ1,templ2,tempr1,tempr2;


	/* Open file for input: */
	if( (fh = _open( "key", _O_RDONLY )) == -1 )
	{
		perror( "Open failed on input file \"key\" " );
		return 1;
	}

	/* Read in input: */
	if( ( _read( fh, buffer, 8 ) ) <= 0 )
		perror( "Problem reading file" );
	else
	{
		_close( fh );
		key = (struct KEYSTRUCT*)buffer; /*Key is assigned*/
		tempkey1.k0=key->k7;  tempkey1.k1=key->k6;  tempkey1.k2=key->k5;   
		tempkey1.k3=key->k4;  tempkey1.k4=key->k3;  tempkey1.k5=key->k2;   
		tempkey1.k6=key->k1;  tempkey1.k7=key->k0;  tempkey1.k8=key->k15;  
		tempkey1.k9=key->k14; tempkey1.k10=key->k13;tempkey1.k11=key->k12; 
		tempkey1.k12=key->k11;tempkey1.k13=key->k10;tempkey1.k14=key->k9;  
		tempkey1.k15=key->k8; tempkey1.k16=key->k23;tempkey1.k17=key->k22; 
		tempkey1.k18=key->k21;tempkey1.k19=key->k20;tempkey1.k20=key->k19; 
		tempkey1.k21=key->k18;tempkey1.k22=key->k17;tempkey1.k23=key->k16; 
		tempkey1.k24=key->k31;tempkey1.k25=key->k30;tempkey1.k26=key->k29; 
		tempkey1.k27=key->k28;tempkey1.k28=key->k27;tempkey1.k29=key->k26; 
		tempkey1.k30=key->k25;tempkey1.k31=key->k24;tempkey1.k32=key->k39; 
		tempkey1.k33=key->k38;tempkey1.k34=key->k37;tempkey1.k35=key->k36; 
		tempkey1.k36=key->k35;tempkey1.k37=key->k34;tempkey1.k38=key->k33; 
		tempkey1.k39=key->k32;tempkey1.k40=key->k47;tempkey1.k41=key->k46; 
		tempkey1.k42=key->k45;tempkey1.k43=key->k44;tempkey1.k44=key->k43; 
		tempkey1.k45=key->k42;tempkey1.k46=key->k41;tempkey1.k47=key->k40; 
		tempkey1.k48=key->k55;tempkey1.k49=key->k54;tempkey1.k50=key->k53; 
		tempkey1.k51=key->k52;tempkey1.k52=key->k51;tempkey1.k53=key->k50; 
		tempkey1.k54=key->k49;tempkey1.k55=key->k48;tempkey1.k56=key->k63; 
		tempkey1.k57=key->k62;tempkey1.k58=key->k61;tempkey1.k59=key->k60; 
		tempkey1.k60=key->k59;tempkey1.k61=key->k58;tempkey1.k62=key->k57; 
		tempkey1.k63=key->k56;
	}
	
	/*Permuted choice 1*/
	tempkey.k0=tempkey1.k56;  tempkey.k1=tempkey1.k48;  tempkey.k2=tempkey1.k40;  
    tempkey.k3=tempkey1.k32;  tempkey.k4=tempkey1.k24;  tempkey.k5=tempkey1.k16;  
	tempkey.k6=tempkey1.k8;   tempkey.k7=tempkey1.k0;   tempkey.k8=tempkey1.k57;  
	tempkey.k9=tempkey1.k49;  tempkey.k10=tempkey1.k41; tempkey.k11=tempkey1.k33; 
	tempkey.k12=tempkey1.k25; tempkey.k13=tempkey1.k17; tempkey.k14=tempkey1.k9;  
	tempkey.k15=tempkey1.k1;  tempkey.k16=tempkey1.k58; tempkey.k17=tempkey1.k50; 
    tempkey.k18=tempkey1.k42; tempkey.k19=tempkey1.k34; tempkey.k20=tempkey1.k26; 
	tempkey.k21=tempkey1.k18; tempkey.k22=tempkey1.k10; tempkey.k23=tempkey1.k2;  
	tempkey.k24=tempkey1.k59; tempkey.k25=tempkey1.k51; tempkey.k26=tempkey1.k43; 
	tempkey.k27=tempkey1.k35; tempkey.k28=tempkey1.k62; tempkey.k29=tempkey1.k54; 
	tempkey.k30=tempkey1.k46; tempkey.k31=tempkey1.k38; tempkey.k32=tempkey1.k30; 
    tempkey.k33=tempkey1.k22; tempkey.k34=tempkey1.k14; tempkey.k35=tempkey1.k6;  
	tempkey.k36=tempkey1.k61; tempkey.k37=tempkey1.k53; tempkey.k38=tempkey1.k45; 
	tempkey.k39=tempkey1.k37; tempkey.k40=tempkey1.k29; tempkey.k41=tempkey1.k21; 
	tempkey.k42=tempkey1.k13; tempkey.k43=tempkey1.k5;  tempkey.k44=tempkey1.k60; 
	tempkey.k45=tempkey1.k52; tempkey.k46=tempkey1.k44; tempkey.k47=tempkey1.k36; 
    tempkey.k48=tempkey1.k28; tempkey.k49=tempkey1.k20; tempkey.k50=tempkey1.k12; 
	tempkey.k51=tempkey1.k4;  tempkey.k52=tempkey1.k27; tempkey.k53=tempkey1.k19; 
    tempkey.k54=tempkey1.k11; tempkey.k55=tempkey1.k3;


/*********************************************/
/****************Key1 generation**************/
/*********************************************/

	/*Left shift of the both parts(for key1)*/
	templ1=tempkey.k0;         tempr1=tempkey.k28;      
	tempkey.k0=tempkey.k1;     tempkey.k28=tempkey.k29; 
	tempkey.k1=tempkey.k2;     tempkey.k29=tempkey.k30; 
	tempkey.k2=tempkey.k3;     tempkey.k30=tempkey.k31; 
	tempkey.k3=tempkey.k4;     tempkey.k31=tempkey.k32; 
	tempkey.k4=tempkey.k5;     tempkey.k32=tempkey.k33; 
	tempkey.k5=tempkey.k6;     tempkey.k33=tempkey.k34; 
	tempkey.k6=tempkey.k7;     tempkey.k34=tempkey.k35; 
	tempkey.k7=tempkey.k8;     tempkey.k35=tempkey.k36; 
	tempkey.k8=tempkey.k9;     tempkey.k36=tempkey.k37; 
	tempkey.k9=tempkey.k10;    tempkey.k37=tempkey.k38; 
	tempkey.k10=tempkey.k11;   tempkey.k38=tempkey.k39; 
	tempkey.k11=tempkey.k12;   tempkey.k39=tempkey.k40; 
	tempkey.k12=tempkey.k13;   tempkey.k40=tempkey.k41; 
	tempkey.k13=tempkey.k14;   tempkey.k41=tempkey.k42; 
	tempkey.k14=tempkey.k15;   tempkey.k42=tempkey.k43; 
	tempkey.k15=tempkey.k16;   tempkey.k43=tempkey.k44; 
	tempkey.k16=tempkey.k17;   tempkey.k44=tempkey.k45; 
	tempkey.k17=tempkey.k18;   tempkey.k45=tempkey.k46; 
	tempkey.k18=tempkey.k19;   tempkey.k46=tempkey.k47; 
	tempkey.k19=tempkey.k20;   tempkey.k47=tempkey.k48; 
	tempkey.k20=tempkey.k21;   tempkey.k48=tempkey.k49; 
	tempkey.k21=tempkey.k22;   tempkey.k49=tempkey.k50; 
	tempkey.k22=tempkey.k23;   tempkey.k50=tempkey.k51; 
	tempkey.k23=tempkey.k24;   tempkey.k51=tempkey.k52; 
	tempkey.k24=tempkey.k25;   tempkey.k52=tempkey.k53; 
	tempkey.k25=tempkey.k26;   tempkey.k53=tempkey.k54; 
	tempkey.k26=tempkey.k27;   tempkey.k54=tempkey.k55; 
	tempkey.k27=templ1;        tempkey.k55=tempr1;

	/*Permuted choice 2(for key 1)*/
	subkey1.k0=tempkey.k13; subkey1.k1=tempkey.k16; subkey1.k2=tempkey.k10;  
    subkey1.k3=tempkey.k23; subkey1.k4=tempkey.k0;  subkey1.k5=tempkey.k4;   
	subkey1.k6=tempkey.k2;  subkey1.k7=tempkey.k27; subkey1.k8=tempkey.k14;  
	subkey1.k9=tempkey.k5;  subkey1.k10=tempkey.k20;subkey1.k11=tempkey.k9;  
	subkey1.k12=tempkey.k22;subkey1.k13=tempkey.k18;subkey1.k14=tempkey.k11; 
	subkey1.k15=tempkey.k3; subkey1.k16=tempkey.k25;subkey1.k17=tempkey.k7;  
    subkey1.k18=tempkey.k15;subkey1.k19=tempkey.k6; subkey1.k20=tempkey.k26; 
	subkey1.k21=tempkey.k19;subkey1.k22=tempkey.k12;subkey1.k23=tempkey.k1;  
	subkey1.k24=tempkey.k40;subkey1.k25=tempkey.k51;subkey1.k26=tempkey.k30; 
	subkey1.k27=tempkey.k36;subkey1.k28=tempkey.k46;subkey1.k29=tempkey.k54; 
	subkey1.k30=tempkey.k29;subkey1.k31=tempkey.k39;subkey1.k32=tempkey.k50; 
    subkey1.k33=tempkey.k44;subkey1.k34=tempkey.k32;subkey1.k35=tempkey.k47; 
	subkey1.k36=tempkey.k43;subkey1.k37=tempkey.k48;subkey1.k38=tempkey.k38; 
	subkey1.k39=tempkey.k55;subkey1.k40=tempkey.k33;subkey1.k41=tempkey.k52; 
	subkey1.k42=tempkey.k45;subkey1.k43=tempkey.k41;subkey1.k44=tempkey.k49; 
	subkey1.k45=tempkey.k35;subkey1.k46=tempkey.k28;subkey1.k47=tempkey.k31; 
 
/*********************************************/
/****************Key2 generation**************/
/*********************************************/
	/*Left shift of the both parts(for key2)*/
	templ1=tempkey.k0;         tempr1=tempkey.k28;      
	tempkey.k0=tempkey.k1;     tempkey.k28=tempkey.k29; 
	tempkey.k1=tempkey.k2;     tempkey.k29=tempkey.k30; 
	tempkey.k2=tempkey.k3;     tempkey.k30=tempkey.k31; 
	tempkey.k3=tempkey.k4;     tempkey.k31=tempkey.k32; 
	tempkey.k4=tempkey.k5;     tempkey.k32=tempkey.k33; 
	tempkey.k5=tempkey.k6;     tempkey.k33=tempkey.k34; 
	tempkey.k6=tempkey.k7;     tempkey.k34=tempkey.k35; 
	tempkey.k7=tempkey.k8;     tempkey.k35=tempkey.k36; 
	tempkey.k8=tempkey.k9;     tempkey.k36=tempkey.k37; 
	tempkey.k9=tempkey.k10;    tempkey.k37=tempkey.k38; 
	tempkey.k10=tempkey.k11;   tempkey.k38=tempkey.k39; 
	tempkey.k11=tempkey.k12;   tempkey.k39=tempkey.k40; 
	tempkey.k12=tempkey.k13;   tempkey.k40=tempkey.k41; 
	tempkey.k13=tempkey.k14;   tempkey.k41=tempkey.k42; 
	tempkey.k14=tempkey.k15;   tempkey.k42=tempkey.k43; 
	tempkey.k15=tempkey.k16;   tempkey.k43=tempkey.k44; 
	tempkey.k16=tempkey.k17;   tempkey.k44=tempkey.k45; 
	tempkey.k17=tempkey.k18;   tempkey.k45=tempkey.k46; 
	tempkey.k18=tempkey.k19;   tempkey.k46=tempkey.k47; 
	tempkey.k19=tempkey.k20;   tempkey.k47=tempkey.k48; 
	tempkey.k20=tempkey.k21;   tempkey.k48=tempkey.k49; 
	tempkey.k21=tempkey.k22;   tempkey.k49=tempkey.k50; 
	tempkey.k22=tempkey.k23;   tempkey.k50=tempkey.k51; 
	tempkey.k23=tempkey.k24;   tempkey.k51=tempkey.k52; 
	tempkey.k24=tempkey.k25;   tempkey.k52=tempkey.k53; 
	tempkey.k25=tempkey.k26;   tempkey.k53=tempkey.k54; 
	tempkey.k26=tempkey.k27;   tempkey.k54=tempkey.k55; 
	tempkey.k27=templ1;        tempkey.k55=tempr1;      

	/*Permuted choice 2(for key 2)*/
	subkey2.k0=tempkey.k13; subkey2.k1=tempkey.k16; subkey2.k2=tempkey.k10;  
    subkey2.k3=tempkey.k23; subkey2.k4=tempkey.k0;  subkey2.k5=tempkey.k4;   
	subkey2.k6=tempkey.k2;  subkey2.k7=tempkey.k27; subkey2.k8=tempkey.k14;  
	subkey2.k9=tempkey.k5;  subkey2.k10=tempkey.k20;subkey2.k11=tempkey.k9;  
	subkey2.k12=tempkey.k22;subkey2.k13=tempkey.k18;subkey2.k14=tempkey.k11; 
	subkey2.k15=tempkey.k3; subkey2.k16=tempkey.k25;subkey2.k17=tempkey.k7;  
    subkey2.k18=tempkey.k15;subkey2.k19=tempkey.k6; subkey2.k20=tempkey.k26; 
	subkey2.k21=tempkey.k19;subkey2.k22=tempkey.k12;subkey2.k23=tempkey.k1;  
	subkey2.k24=tempkey.k40;subkey2.k25=tempkey.k51;subkey2.k26=tempkey.k30; 
	subkey2.k27=tempkey.k36;subkey2.k28=tempkey.k46;subkey2.k29=tempkey.k54; 
	subkey2.k30=tempkey.k29;subkey2.k31=tempkey.k39;subkey2.k32=tempkey.k50; 
    subkey2.k33=tempkey.k44;subkey2.k34=tempkey.k32;subkey2.k35=tempkey.k47; 
	subkey2.k36=tempkey.k43;subkey2.k37=tempkey.k48;subkey2.k38=tempkey.k38; 
	subkey2.k39=tempkey.k55;subkey2.k40=tempkey.k33;subkey2.k41=tempkey.k52; 
	subkey2.k42=tempkey.k45;subkey2.k43=tempkey.k41;subkey2.k44=tempkey.k49; 
	subkey2.k45=tempkey.k35;subkey2.k46=tempkey.k28;subkey2.k47=tempkey.k31; 

/*********************************************/
/****************Key3 generation**************/
/*********************************************/
	/*Left shift of the both parts(for key3)*/
	templ1=tempkey.k0;         tempr1=tempkey.k28;       
	templ2=tempkey.k1;         tempr2=tempkey.k29;       
	tempkey.k0=tempkey.k2;     tempkey.k28=tempkey.k30;  
	tempkey.k1=tempkey.k3;     tempkey.k29=tempkey.k31;  
	tempkey.k2=tempkey.k4;     tempkey.k30=tempkey.k32;
	tempkey.k3=tempkey.k5;     tempkey.k31=tempkey.k33;
	tempkey.k4=tempkey.k6;     tempkey.k32=tempkey.k34;
	tempkey.k5=tempkey.k7;     tempkey.k33=tempkey.k35;
	tempkey.k6=tempkey.k8;     tempkey.k34=tempkey.k36;
	tempkey.k7=tempkey.k9;     tempkey.k35=tempkey.k37;
	tempkey.k8=tempkey.k10;    tempkey.k36=tempkey.k38;
	tempkey.k9=tempkey.k11;    tempkey.k37=tempkey.k39;
	tempkey.k10=tempkey.k12;   tempkey.k38=tempkey.k40;
	tempkey.k11=tempkey.k13;   tempkey.k39=tempkey.k41;
	tempkey.k12=tempkey.k14;   tempkey.k40=tempkey.k42;
	tempkey.k13=tempkey.k15;   tempkey.k41=tempkey.k43;
	tempkey.k14=tempkey.k16;   tempkey.k42=tempkey.k44;
	tempkey.k15=tempkey.k17;   tempkey.k43=tempkey.k45;
	tempkey.k16=tempkey.k18;   tempkey.k44=tempkey.k46;
	tempkey.k17=tempkey.k19;   tempkey.k45=tempkey.k47;

⌨️ 快捷键说明

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