Simplified DES

praneethkumar's Avatar, Join Date: Aug 2007
Newbie Member
I have written a code for Simplified DES for simplified DES can any one help me in makin' necessary Corrections
Code:
#include<string.h>
char ep[8],p10[10],p8[8],ip[8],ip1[8],pr[10],key1[8],key2[8],p4[4];
int s0[4][4]={{1,0,3,2},{3,2,1,0},{0,2,1,3},{3,1,3,2}}
,s1[4][4]={{0,1,2,3},{2,0,1,3},{3,0,1,0},{2,1,0,3}};
void p10f(char ab[10])
{
 strcpy(p10,"\0");
 p10[0]=ab[2];p10[1]=ab[4];p10[2]=ab[1];p10[3]=ab[6];p10[4]=ab[3];
 p10[5]=ab[9];p10[6]=ab[0];p10[7]=ab[8];p10[8]=ab[7];p10[9]=ab[5];
}
void p8f(char cd[10])
{
 strcpy(p8,"\0");
 p10[0]=cd[5];p10[1]=cd[2];p10[2]=cd[6];p10[3]=cd[3];p10[4]=cd[7];
 p10[5]=cd[4];p10[6]=cd[9];p10[7]=cd[8];
}
void p4f(char lm[4])
{
 strcpy(p4,"\0");
 p4[0]=lm[1];p4[1]=lm[3];p4[2]=lm[2];p4[3]=lm[0];
}
void epf(char ed[4])
{
 strcpy(ep,"\0");
 ep[0]=ed[3];ep[1]=ed[0];ep[2]=ed[1];ep[3]=ed[2];ep[4]=ed[1];
 ep[5]=ed[2];ep[6]=ed[3];ep[7]=ed[0];
}
void ipf(char ef[8])
{
 strcpy(ip,"\0");
 ip[0]=ef[1];ip[1]=ef[5];ip[2]=ef[2];ip[3]=ef[0];ip[4]=ef[3];
 ip[5]=ef[7];ip[6]=ef[4];ip[7]=ef[6];
}
void ip1f(char ef[8])
{
 strcpy(ip1,"\0");
 ip1[0]=ef[3];ip1[1]=ef[0];ip1[2]=ef[2];ip1[3]=ef[4];ip1[4]=ef[6];
 ip1[5]=ef[1];ip1[6]=ef[7];ip1[7]=ef[5];
}
const char* substr(char* pra,int strt,int end)
{
  int j,k=0;
  char *a;
  for(j=strt,k=0;j<=end&&k<=(end-strt);j++,k++)
    a[k]=pra[j];
  return a;
}
const char* leftshift(char* vam,int sid)
{
  int tmp;
  char* chaitu;
  for(tmp=0;tmp<strlen(vam);tmp++)
     chaitu[tmp]=vam[tmp]-sid;
  return chaitu;
}
const char* exor(char* pra,char* div)
{
  int x;
  char* out;
  for(x=0;x<strlen(pra);x++)
  {
    if(pra[x]==div[x])
     out[x]='0';
    else
     out[x]='1';
  }
  return out;
}
void genkey(char keyz[10])
{
 char pra[5],giri[5],raj[5],vasu[5],sri[10];
 strcpy(key1,"\0");
 strcpy(key2,"\0");
 strcpy(pra,substr(keyz,0,4));
 strcpy(giri,substr(keyz,5,9));
 strcpy(raj,leftshift(pra,1));
 strcpy(vasu,leftshift(giri,1));
 strcpy(sri,strcat(raj,vasu));
 p8f(sri);
 strcpy(key1,p8);
 strcpy(pra,substr(key1,0,4));
 strcpy(giri,substr(key1,5,9));
 strcpy(raj,leftshift(pra,2));
 strcpy(vasu,leftshift(giri,2));
 strcpy(sri,strcat(raj,vasu));
 p8f(sri);
 strcpy(key2,p8);
}
int toNumber(char re[2]){
int hi;
if(strcmp(re,"00")==0)
hi=0;
if(strcmp(re,"01")==0)
hi=1;
if(strcmp(re,"10")==0)
hi=2;
if(strcmp(re,"11")==0)
hi=4;
return hi;
}
const char* binary(int ki)
{
char trap[2];
  if(ki==0)
    strcpy(trap,"00");
  if(ki==1)
    strcpy(trap,"01");
  if(ki==2)
    strcpy(trap,"10");
  if(ki==3)
    strcpy(trap,"11");
  return trap;
}
const char* DES(char tmptxt[8])
{
char temp[4],temp2[8],tmpx[2],tmpy[2],temp3[4],
outsx,outsy,tmpu[2],tmpv[2],templ[2],tempr[2],tempq[4],temp4[4],tempw[4],
tmptxt3[8],tmpin[4];
int i,j,m,n;
strcpy(temp,substr(tmptxt,4,7));
strcpy(tempw,substr(tmptxt,0,3));
epf(temp);
strcpy(temp2,exor(ep,key2));
strcpy(temp3,substr(ip,0,3));
strcpy(temp4,substr(ip,4,7));
tmpx[0]=temp3[0];tmpx[1]=temp3[3];
tmpy[0]=temp3[1];tmpy[1]=temp3[2];
i=toNumber(tmpx);j=toNumber(tmpy);
tmpu[0]=temp4[0];tmpu[1]=temp4[3];
tmpv[0]=temp4[1];tmpv[1]=temp4[2];
m=toNumber(tmpu);n=toNumber(tmpv);
strcpy(templ,binary(s1[i][j]));
strcpy(tempr,binary(s1[m][n]));
strcpy(tempq,"\0");
strcat(tempq,templ);
strcat(tempq,tempr);
p4f(tempq);
strcpy(tmpin,exor(p4,tempw));
strcpy(tmptxt3,"\0");
strcat(tmptxt3,temp);
strcat(tmptxt3,tmpin);
return tmptxt3;
}
int main()
{
char ptxt[8],key[10],temptxt[8],temptxt1[8],temp[4],
temp2[8],tmpx[2],tmpy[2],temp3[4],outsx,outsy,tmpu[2],
tmpv[2],templ[2],tempr[2],tempq[4],temp4[4],tempw[4],
tmptxt[8],tmpin[4];
int i,j,m,n;
clrscr();
printf("\t");
printf("Enter The Plain Txt of 8 bits");
scanf("%s",ptxt);
printf("Enter the Key(10 bits)");
scanf("%s",key);
genkey(key);
ipf(ptxt);
strcpy(temp,substr(ip,4,7));
strcpy(tempw,substr(ip,0,3));
epf(temp);
strcpy(temp2,exor(ep,key1));
strcpy(temp3,substr(ip,0,3));
strcpy(temp4,substr(ip,4,7));
tmpx[0]=temp3[0];tmpx[1]=temp3[3];
tmpy[0]=temp3[1];tmpy[1]=temp3[2];
i=toNumber(tmpx);j=toNumber(tmpy);
tmpu[0]=temp4[0];tmpu[1]=temp4[3];
tmpv[0]=temp4[1];tmpv[1]=temp4[2];
m=toNumber(tmpu);n=toNumber(tmpv);
strcpy(templ,binary(s1[i][j]));
strcpy(tempr,binary(s1[m][n]));
strcpy(tempq,"\0");
strcat(tempq,templ);
strcat(tempq,tempr);
p4f(tempq);
strcpy(tmpin,exor(p4,tempw));
strcpy(tmptxt,"\0");
strcat(tmptxt,temp);
strcat(tmptxt,tmpin);
strcpy(temp,substr(tmptxt,4,7));
strcpy(tempw,substr(tmptxt,0,3));
epf(temp);
strcpy(temp2,exor(ep,key2));
strcpy(temp3,substr(ip,0,3));
strcpy(temp4,substr(ip,4,7));
tmpx[0]=temp3[0];tmpx[1]=temp3[3];
tmpy[0]=temp3[1];tmpy[1]=temp3[2];< BR>i=toNumber(tmpx);j=toNumber(tmpy);
tmpu[0]=temp4[0];tmpu[1]=temp4[3];
tmpv[0]=temp4[1];tmpv[1]=temp4[2];
m=toNumber(tmpu);n=toNumber(tmpv);
strcpy(templ,binary(s1[i][j]));
strcpy(tempr,binary(s1[m][n]));
strcpy(tempq,"\0");
strcat(tempq,templ);
strcat(tempq,tempr);
p4f(tempq);
strcpy(tmpin,exor(p4,tempw));
strcpy(tmptxt,"\0");
strcat(tmptxt,temp);
strcat(tmptxt,tmpin);
ip1f(tmptxt);
printf("%s",ip1);
return 0;
}

Last edited by shabbir; 20Aug2007 at 10:00.. Reason: Code block
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
Do you expect someone would know whats the problem and correct your code as per your need even you don't let us know the problem.
praneethkumar's Avatar, Join Date: Aug 2007
Newbie Member
The Problem is that it is not delivering any Cipher It is coming out to the Windows when Compiled