📄 key_gen.c
字号:
//////////////////////////////////////////////////////////////////////////////
// ************************** //
// *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 + -