C
Crane
Unregistered / Unconfirmed
GUEST, unregistred user!
#include <stdio.h>
#include <conio.h>
typedef int arr64[65];
typedef int arr86[9][7];
typedef int arr84[9][5];
typedef int arr8[9];
typedef int arr56[57];
typedef int arr48[49];
typedef int arr32[33];
typedef int arr16[17];
typedef char arrchar8[10];
typedef int arr28[29];
arr64 kb,q,rq,t,t1,t4;
arr28 pc1a,pc1b;
arr48 pc2,e;
arr32 fr,p,t2,t3,l,r,ln,rn;
int i,j;
arr16 shift;
arr48 kn[17];
arrchar8 key,plaintext,plaincode,ciphertext;
int s[9][5][17];
FILE *inf;
//*****************initialize***************/
void init1()
{
int i,j,m;
inf=fopen("e://tc//pr//desinfo.txt","r");
for (i=0;i<=7;i++)
{
for(j=1;j<=8;j++)
{
fscanf(inf,"%d",&q[i*8+j]);
}
}
for (i=0;i<=7;i++)
{
for(j=1;j<=6;j++)
{
fscanf(inf,"%d",&e[i*6+j]);
printf("%2d ",e[i*6+j]);
}
printf("/n");
}
for(i=1;i<=16;i++)
{
fscanf(inf,"%d",&shift);
}
for (i=0;i<=7;i++)
{
for(j=1;j<=4;j++)
{
fscanf(inf,"%d",&p[i*4+j]);
// printf("%2d ",p[i*4+j]);
}
// printf("/n");
}
for (i=0;i<=7;i++)
{
for(j=1;j<=4;j++)
{
for(m=1;m<=16;m++)
{
fscanf(inf,"%d",&s[i+1][j][m]);
}
}
}
for(i=0;i<=3;i++)
{
for(j=1;j<=7;j++)
{
fscanf(inf,"%d",&pc1a[i*7+j]);
}
}
for (i=0;i<=3;i++)
{
for(j=1;j<=7;j++)
{
fscanf(inf,"%d",&pc1b[i*7+j]);
}
}
for (i=0;i<=7;i++)
{
for(j=1;j<=6;j++)
{
fscanf(inf,"%d",&pc2[i*6+j]);
}
}
fclose(inf);
for(i=1;i<=64;i++)
{
rq[q]=i;
}
}
//*************initialize*************//
//*************conver 8 charactors to ASCII**//
void encode(int *a1,char *a2)
{
int i,j,m,b1,b2,c2,c4;
char b;
for(i=0;i<=7;i++)
{
m=0;
b=a2[i+1];
b1=b;
// printf("%c",b1);
for(j=7;j>=1;j--)
{
if(b1==0)
{
a1[i*8+j]=0;
}
else
{
b2=b1%2;
b1=b1/2;
m=(b2+m)%2;
a1[i*8+j]=b2;
}
a1[i*8+8]=m;
}
}
}
//*************conver 8 charactors to ASCII**//
//******conver 8 AscII char to normal charactors//
void decode(char *yy,arr64 xx)
{
int i,j,x;
for(i=0;i<=7;i++)
{
x=0;
for(j=1;j<=7;j++)
{
x=x*2+xx[i*8+j];
yy[i+1]=x;
}
}
}
//******convert 8 AscII char to normal charactors//
//*****make 16 sub key******//
void rls(int *am,int m)
{
int x,i,j;
for(i=1;i<=m;i++)
{
x=am[1];
for(j=2;j<=28;j++)
{
am[j-1]=am[j];
}
am[28]=x;
}
}
void setks()
{
int ll,x,i,j;
arr56 cd;
arr28 c,d;
printf("/n");
printf(" 16 sub key!/n");
printf("/n");
for(ll=1;ll<=8;ll++)
{
printf("%c",key[ll]);
}
printf("/n");
encode(kb,key);
for(ll=1;ll<=28;ll++)
{
c[ll]=kb[pc1a[ll]];
d[ll]=kb[pc1b[ll]];
// printf("%d ",pc1b[l]);
}
for(i=1;i<=16;i++)
{
rls(c,shift);
rls(d,shift);
for(j=1;j<=28;j++)
{
cd[j]=c[j];
cd[j+28]=d[j];
}
for(ll=1;ll<=48;ll++)
{
kn[ll]=cd[pc2[ll]];
}
// getche();
printf("/n");
printf("N=%3d:",i);
for(ll=1;ll<=48;ll++)
{
printf("%1d",kn[ll]);
if((ll%8)==0){printf(" ");};
}
printf("/n");
}
};
//*****make 16 sub key******//
//******function for des******//
void f(int *rr,arr48 tt)
{
arr48 tt1,tt2;
arr86 tt86;
arr8 tt8;
arr32 tt3,tt4;
int m,n,i,j;
for(i=1;i<=48;i++)
{
tt1=rr[e];
// printf("rr[%d]= %d/n",e,rr[e]);
tt2=(tt1+tt)%2;
// getche();
}
printf("f: E[R]=");
for(i=1;i<=48;i++)
{
printf("%1d",tt1);
}
getche();
printf("/n");
printf("f: E[R] XOR K=");
for(i=1;i<=48;i++)
{
// printf("%1d",tt2);
}
// printf("/n");
for (i=0;i<=7;i++)
{
for(j=1;j<=6;j++)
{
tt86[i+1][j]=tt2[i*6+j];
// printf("%d",tt86[i+1][j]);
}
// printf("/n");
}
// getche();
for(i=1;i<=8;i++)
{
m=tt86[1]*2+tt86[6];
n=tt86[2]*8+tt86[3]*4+tt86[4]*2+tt86[5];
tt8=s[m+1][n+1];
// printf("%d ",tt8);
}
//getche();
for(i=1;i<=8;i++)
{
for(j=0;j<=3;j++)
{
if(tt8==0)
{
tt3[i*4-j]=0;
}
else
{
tt3[i*4-j]=tt8%2;
tt8=tt8/2;
}
// printf("%d ",tt3[i*4-j]);
}
// printf("/n");
}
for(i=1;i<32;i++)
{
tt4=tt3[p];
fr=tt4;
}
printf("f: PERM P=");
for(i=1;i<=32;i++)
{
printf("%1d",tt3);
}
printf("/n");
printf("f:f(R,KN)=");
for(i=1;i<=32;i++)
{
printf("%1d",tt4);
}
printf("/n");
}
void ip(int *text)
{
arr64 text1;
int i;
for(i=1;i<65;i++)
{
text1=text;
}
printf("What the Ip input is:");
for(i=1;i<=64;i++)
{
printf("%1d",text);
}
printf("/n");
for(i=1;i<=64;i++)
{
text=text1[q];
}
printf("What the Ip Output is:");
for(i=1;i<=64;i++)
{
printf("%1d",text);
}
printf("/n");
//getche();
}
void rip(int *text)
{
arr64 text1;
int i;
for(i=1;i<=64;i++)
{
text1=text;
}
printf("/n");
printf("What the Rip input is:");
for(i=1;i<=64;i++)
{
printf("%1d",text);
}
printf("/n");
for(i=1;i<=64;i++)
{
text=text1[rq];
}
printf("/n");
printf("What the Rip output is:");
for(i=1;i<=64;i++)
{
printf("%1d",text);
}
printf("/n");
}
//******function for des******//
//******encrypt procedure**********//
void cipher()//加密过程
{
int i,h;
printf("/n");
printf("***********encrypt procedure**********");
printf("/n");
for(i=1;i<=64;i++)
{
t=t1;
}
ip(t);
for(i=1;i<=32;i++)
{
l=t;
r=t[32+i];
}
for(i=1;i<=16;i++)
{
printf("/n");
printf("/n");
printf("CHIPER:ITERATION%4d",i);
printf("/n");
printf("chiper:l=");
for(j=1;j<=32;j++){printf("%1d",l[j]);};
printf("/n");
printf("chiper: r=");
for(j=1;j<=32;j++){printf("%1d",r[j]);};
printf("/n");
getche();
for(h=1;h<=32;h++)
{
ln[h]=r[h];
}
f(r,kn);
for(h=1;h<=32;h++)
{
t2[h]=fr[h];
}
for(j=1;j<=32;j++)
{
t3[j]=(l[j]+t2[j])%2;
}
for(h=1;h<=32;h++)
{
rn[h]=t3[h];
r[h]=rn[h];
l[h]=ln[h];
}
printf("chiper:next l=");
for(j=1;j<=32;j++){printf("%1d",l[j]);};
printf("/n");
printf("chiper:next r=");
for(j=1;j<=32;j++){printf("%1d",r[j]);};
printf("/n");
getche();
}
for(i=1;i<=32;i++)
{
t4=rn;
t4[i+32]=ln;
}
rip(t4);
decode(ciphertext,t4);
printf("/n");
printf("密文is:");
for(i=1;i<=8;i++)
{
printf("%c",ciphertext);
}
printf("/n");
printf("/n");
}
//******encrypt procedure**********//
//**decrypt procedure *******//
void decipher()
{
int h;
printf("/n");
printf("***********decrypt procedure**********");
printf("/n");
ip(t4);
for(i=1;i<=64;i++)
{
t=t4;
}
for(i=1;i<=32;i++)
{
rn=t;
ln=t[32+i];
}
for(i=16;i>=1;i--)
{
printf("/n");
printf("/n");
printf("DECIPHER:ITERATION%4d",i);
printf("/n");
printf("decipher:l=");
for(j=1;j<=32;j++){printf("%1d",ln[j]);};
printf("/n");
printf("decipher: r=");
for(j=1;j<=32;j++){printf("%1d",rn[j]);};
printf("/n");
for(h=1;h<=32;h++)
{
r[h]=ln[h];
}
f(ln,kn);
for(h=1;h<=32;h++)
{
t2[h]=fr[h];
}
for(j=1;j<=32;j++)
{
t3[j]=(rn[j]+t2[j])%2;
}
for(h=1;h<=32;h++)
{
l[h]=t3[h];
ln[h]=l[h];
rn[h]=r[h];
}
printf("decipher:next l=");
for(j=1;j<=32;j++){printf("%1d",l[j]);};
printf("/n");
printf("decipher:next r=");
for(j=1;j<=32;j++){printf("%1d",r[j]);};
printf("/n");
}
for(i=1;i<=32;i++)
{
t4=l;
t4[i+32]=r;
}
rip(t4);
decode(plaincode,t4);
printf("/n");
printf("The origional text is:");
for(i=1;i<=8;i++)
{
printf("%c",plaincode);
}
printf("/n");
printf("/n");
}
//**decrypt procedure *******//
//**main programe**//
void main()
{
init1();
printf("Please input the origtional text:");
for(i=1;i<=9;i++)
{
plaintext=getchar();
}
//strcpy(plaintext+1,"COMPUTER");
plaintext[9]='/0';
printf("%s/n",plaintext+1);
/*printf("Please input the Passkey:");
for(i=1;i<=9;i++)
{
key=getchar();
} */
strcpy(key+1,"DATABASE");
key[9]='/0';
printf("%s",key+1);
setks();
encode(t1,plaintext);
getche();
cipher();
getche();
decipher();
getche();
}
#include <conio.h>
typedef int arr64[65];
typedef int arr86[9][7];
typedef int arr84[9][5];
typedef int arr8[9];
typedef int arr56[57];
typedef int arr48[49];
typedef int arr32[33];
typedef int arr16[17];
typedef char arrchar8[10];
typedef int arr28[29];
arr64 kb,q,rq,t,t1,t4;
arr28 pc1a,pc1b;
arr48 pc2,e;
arr32 fr,p,t2,t3,l,r,ln,rn;
int i,j;
arr16 shift;
arr48 kn[17];
arrchar8 key,plaintext,plaincode,ciphertext;
int s[9][5][17];
FILE *inf;
//*****************initialize***************/
void init1()
{
int i,j,m;
inf=fopen("e://tc//pr//desinfo.txt","r");
for (i=0;i<=7;i++)
{
for(j=1;j<=8;j++)
{
fscanf(inf,"%d",&q[i*8+j]);
}
}
for (i=0;i<=7;i++)
{
for(j=1;j<=6;j++)
{
fscanf(inf,"%d",&e[i*6+j]);
printf("%2d ",e[i*6+j]);
}
printf("/n");
}
for(i=1;i<=16;i++)
{
fscanf(inf,"%d",&shift);
}
for (i=0;i<=7;i++)
{
for(j=1;j<=4;j++)
{
fscanf(inf,"%d",&p[i*4+j]);
// printf("%2d ",p[i*4+j]);
}
// printf("/n");
}
for (i=0;i<=7;i++)
{
for(j=1;j<=4;j++)
{
for(m=1;m<=16;m++)
{
fscanf(inf,"%d",&s[i+1][j][m]);
}
}
}
for(i=0;i<=3;i++)
{
for(j=1;j<=7;j++)
{
fscanf(inf,"%d",&pc1a[i*7+j]);
}
}
for (i=0;i<=3;i++)
{
for(j=1;j<=7;j++)
{
fscanf(inf,"%d",&pc1b[i*7+j]);
}
}
for (i=0;i<=7;i++)
{
for(j=1;j<=6;j++)
{
fscanf(inf,"%d",&pc2[i*6+j]);
}
}
fclose(inf);
for(i=1;i<=64;i++)
{
rq[q]=i;
}
}
//*************initialize*************//
//*************conver 8 charactors to ASCII**//
void encode(int *a1,char *a2)
{
int i,j,m,b1,b2,c2,c4;
char b;
for(i=0;i<=7;i++)
{
m=0;
b=a2[i+1];
b1=b;
// printf("%c",b1);
for(j=7;j>=1;j--)
{
if(b1==0)
{
a1[i*8+j]=0;
}
else
{
b2=b1%2;
b1=b1/2;
m=(b2+m)%2;
a1[i*8+j]=b2;
}
a1[i*8+8]=m;
}
}
}
//*************conver 8 charactors to ASCII**//
//******conver 8 AscII char to normal charactors//
void decode(char *yy,arr64 xx)
{
int i,j,x;
for(i=0;i<=7;i++)
{
x=0;
for(j=1;j<=7;j++)
{
x=x*2+xx[i*8+j];
yy[i+1]=x;
}
}
}
//******convert 8 AscII char to normal charactors//
//*****make 16 sub key******//
void rls(int *am,int m)
{
int x,i,j;
for(i=1;i<=m;i++)
{
x=am[1];
for(j=2;j<=28;j++)
{
am[j-1]=am[j];
}
am[28]=x;
}
}
void setks()
{
int ll,x,i,j;
arr56 cd;
arr28 c,d;
printf("/n");
printf(" 16 sub key!/n");
printf("/n");
for(ll=1;ll<=8;ll++)
{
printf("%c",key[ll]);
}
printf("/n");
encode(kb,key);
for(ll=1;ll<=28;ll++)
{
c[ll]=kb[pc1a[ll]];
d[ll]=kb[pc1b[ll]];
// printf("%d ",pc1b[l]);
}
for(i=1;i<=16;i++)
{
rls(c,shift);
rls(d,shift);
for(j=1;j<=28;j++)
{
cd[j]=c[j];
cd[j+28]=d[j];
}
for(ll=1;ll<=48;ll++)
{
kn[ll]=cd[pc2[ll]];
}
// getche();
printf("/n");
printf("N=%3d:",i);
for(ll=1;ll<=48;ll++)
{
printf("%1d",kn[ll]);
if((ll%8)==0){printf(" ");};
}
printf("/n");
}
};
//*****make 16 sub key******//
//******function for des******//
void f(int *rr,arr48 tt)
{
arr48 tt1,tt2;
arr86 tt86;
arr8 tt8;
arr32 tt3,tt4;
int m,n,i,j;
for(i=1;i<=48;i++)
{
tt1=rr[e];
// printf("rr[%d]= %d/n",e,rr[e]);
tt2=(tt1+tt)%2;
// getche();
}
printf("f: E[R]=");
for(i=1;i<=48;i++)
{
printf("%1d",tt1);
}
getche();
printf("/n");
printf("f: E[R] XOR K=");
for(i=1;i<=48;i++)
{
// printf("%1d",tt2);
}
// printf("/n");
for (i=0;i<=7;i++)
{
for(j=1;j<=6;j++)
{
tt86[i+1][j]=tt2[i*6+j];
// printf("%d",tt86[i+1][j]);
}
// printf("/n");
}
// getche();
for(i=1;i<=8;i++)
{
m=tt86[1]*2+tt86[6];
n=tt86[2]*8+tt86[3]*4+tt86[4]*2+tt86[5];
tt8=s[m+1][n+1];
// printf("%d ",tt8);
}
//getche();
for(i=1;i<=8;i++)
{
for(j=0;j<=3;j++)
{
if(tt8==0)
{
tt3[i*4-j]=0;
}
else
{
tt3[i*4-j]=tt8%2;
tt8=tt8/2;
}
// printf("%d ",tt3[i*4-j]);
}
// printf("/n");
}
for(i=1;i<32;i++)
{
tt4=tt3[p];
fr=tt4;
}
printf("f: PERM P=");
for(i=1;i<=32;i++)
{
printf("%1d",tt3);
}
printf("/n");
printf("f:f(R,KN)=");
for(i=1;i<=32;i++)
{
printf("%1d",tt4);
}
printf("/n");
}
void ip(int *text)
{
arr64 text1;
int i;
for(i=1;i<65;i++)
{
text1=text;
}
printf("What the Ip input is:");
for(i=1;i<=64;i++)
{
printf("%1d",text);
}
printf("/n");
for(i=1;i<=64;i++)
{
text=text1[q];
}
printf("What the Ip Output is:");
for(i=1;i<=64;i++)
{
printf("%1d",text);
}
printf("/n");
//getche();
}
void rip(int *text)
{
arr64 text1;
int i;
for(i=1;i<=64;i++)
{
text1=text;
}
printf("/n");
printf("What the Rip input is:");
for(i=1;i<=64;i++)
{
printf("%1d",text);
}
printf("/n");
for(i=1;i<=64;i++)
{
text=text1[rq];
}
printf("/n");
printf("What the Rip output is:");
for(i=1;i<=64;i++)
{
printf("%1d",text);
}
printf("/n");
}
//******function for des******//
//******encrypt procedure**********//
void cipher()//加密过程
{
int i,h;
printf("/n");
printf("***********encrypt procedure**********");
printf("/n");
for(i=1;i<=64;i++)
{
t=t1;
}
ip(t);
for(i=1;i<=32;i++)
{
l=t;
r=t[32+i];
}
for(i=1;i<=16;i++)
{
printf("/n");
printf("/n");
printf("CHIPER:ITERATION%4d",i);
printf("/n");
printf("chiper:l=");
for(j=1;j<=32;j++){printf("%1d",l[j]);};
printf("/n");
printf("chiper: r=");
for(j=1;j<=32;j++){printf("%1d",r[j]);};
printf("/n");
getche();
for(h=1;h<=32;h++)
{
ln[h]=r[h];
}
f(r,kn);
for(h=1;h<=32;h++)
{
t2[h]=fr[h];
}
for(j=1;j<=32;j++)
{
t3[j]=(l[j]+t2[j])%2;
}
for(h=1;h<=32;h++)
{
rn[h]=t3[h];
r[h]=rn[h];
l[h]=ln[h];
}
printf("chiper:next l=");
for(j=1;j<=32;j++){printf("%1d",l[j]);};
printf("/n");
printf("chiper:next r=");
for(j=1;j<=32;j++){printf("%1d",r[j]);};
printf("/n");
getche();
}
for(i=1;i<=32;i++)
{
t4=rn;
t4[i+32]=ln;
}
rip(t4);
decode(ciphertext,t4);
printf("/n");
printf("密文is:");
for(i=1;i<=8;i++)
{
printf("%c",ciphertext);
}
printf("/n");
printf("/n");
}
//******encrypt procedure**********//
//**decrypt procedure *******//
void decipher()
{
int h;
printf("/n");
printf("***********decrypt procedure**********");
printf("/n");
ip(t4);
for(i=1;i<=64;i++)
{
t=t4;
}
for(i=1;i<=32;i++)
{
rn=t;
ln=t[32+i];
}
for(i=16;i>=1;i--)
{
printf("/n");
printf("/n");
printf("DECIPHER:ITERATION%4d",i);
printf("/n");
printf("decipher:l=");
for(j=1;j<=32;j++){printf("%1d",ln[j]);};
printf("/n");
printf("decipher: r=");
for(j=1;j<=32;j++){printf("%1d",rn[j]);};
printf("/n");
for(h=1;h<=32;h++)
{
r[h]=ln[h];
}
f(ln,kn);
for(h=1;h<=32;h++)
{
t2[h]=fr[h];
}
for(j=1;j<=32;j++)
{
t3[j]=(rn[j]+t2[j])%2;
}
for(h=1;h<=32;h++)
{
l[h]=t3[h];
ln[h]=l[h];
rn[h]=r[h];
}
printf("decipher:next l=");
for(j=1;j<=32;j++){printf("%1d",l[j]);};
printf("/n");
printf("decipher:next r=");
for(j=1;j<=32;j++){printf("%1d",r[j]);};
printf("/n");
}
for(i=1;i<=32;i++)
{
t4=l;
t4[i+32]=r;
}
rip(t4);
decode(plaincode,t4);
printf("/n");
printf("The origional text is:");
for(i=1;i<=8;i++)
{
printf("%c",plaincode);
}
printf("/n");
printf("/n");
}
//**decrypt procedure *******//
//**main programe**//
void main()
{
init1();
printf("Please input the origtional text:");
for(i=1;i<=9;i++)
{
plaintext=getchar();
}
//strcpy(plaintext+1,"COMPUTER");
plaintext[9]='/0';
printf("%s/n",plaintext+1);
/*printf("Please input the Passkey:");
for(i=1;i<=9;i++)
{
key=getchar();
} */
strcpy(key+1,"DATABASE");
key[9]='/0';
printf("%s",key+1);
setks();
encode(t1,plaintext);
getche();
cipher();
getche();
decipher();
getche();
}