Home      Affiliated Colleges      Course content      First Sem     Second Sem     Third Sem     Fourth Sem     Fifth Sem     Sixth Sem     Seventh Sem     Eighth Sem     Lab report 4th sem     Contact    

Wednesday, January 26, 2011

introduction to Cryptography: SDES Using C Program

#include<stdio.h>
#include<conio.h>
void p10(int data[10])
{
 int i,j;
 int temp[10];
 temp[0]=data[2];
 temp[1]=data[4];
 temp[2]=data[1];
 temp[3]=data[6];
 temp[4]=data[3];
 temp[5]=data[9];
 temp[5]=data[0];
 temp[7]=data[8];
 temp[8]=data[7];
 temp[9]=data[5];
 for(i=0;i<10;i++)
  data[i]=temp[i];
}
void p8(int data[10],int data2[8])
{
 data2[0]=data[5];
 data2[1]=data[2];
 data2[2]=data[6];
 data2[3]=data[3];
 data2[4]=data[7];
 data2[5]=data[4];
 data2[6]=data[9];
 data2[7]=data[8];
}
void ip(int data[8])
{
 int i,j,temp[8];
 temp[0]=data[1];
 temp[1]=data[5];
 temp[2]=data[2];
 temp[3]=data[0];
 temp[4]=data[3];
 temp[5]=data[7];
 temp[6]=data[4];
 temp[7]=data[6];
 for(i=0;i<8;i++)
  data[i]=temp[i];
}
void iip(int data[8])
{
 int i,j;
 int temp[8];
 temp[0]=data[3];
 temp[1]=data[0];
 temp[2]=data[2];
 temp[3]=data[4];
 temp[4]=data[6];
 temp[5]=data[1];
 temp[6]=data[7];
 temp[7]=data[5];
 for(i=0;i<8;i++)
  data[i]=temp[i];
}
void ep(int data[4],int data2[8])
{
 data2[0]=data[3];
 data2[1]=data[0];
 data2[2]=data[1];
 data2[3]=data[2];
 data2[4]=data[1];
 data2[5]=data[2];
 data2[6]=data[3];
 data2[7]=data[0];
}
void p4(int data[4])
{
 int i,j;
 int temp[4];
 temp[0]=data[1];
 temp[1]=data[3];
 temp[2]=data[2];
 temp[3]=data[0];

 for(i=0;i<4;i++)
  data[i]=temp[i];
}
/*void mat(int ss1[],int ss2[])
{

}*/
void lshift(int key[])
{
  int temp=key[0];
 for(int i=0;i<5;i++)
  key[i]=key[i+1];
  key[4]=temp;
}
void b4lshift(int key[],int k1h[],int k2h[])
{
  for(int i=0;i<5;i++)
 {
  k1h[i]=key[i];
  k2h[i]=key[i+5];
 }
}
void aflshift(int k1h[],int k2h[],int temp[],int key[])
{
 for(int i=0;i<5;i++)
 {
  temp[i]=k1h[i];
  temp[i+5]=k2h[i];
  key[i]=k1h[i];
  key[i+5]=k2h[i];
 }
}
void div_pt(int pt[],int pt1[],int pt2[])
{
 for(int i=0;i<4;i++)
 {
  pt1[i]=pt[i];
  pt2[i]=pt[i+4];
 }
}
void xor8(int pt[],int subkey[])
{
 for(int i=0;i<8;i++)
 {
  if(pt[i]==subkey[i])
    pt[i]=0;
  else
   pt[i]=1;
 }
}
void xor4(int temp1[],int temp2[])
{
 for(int i=0;i<4;i++)
 {
  if(temp1[i]==temp2[i])
   temp1[i]=0;
  else
   temp1[i]=1;
 }
}

void binary(int n,int bin[2])
{
 int i;
 for(i=1;i>=0;i--)
 {
  bin[i]=n%2;
  n=n/2;
 }
}
void subs_choice(int sc1[],int sc2[])
{
 //int ss01[2],ss1[2];
 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},i,j,k,l,bin1[2],bin2[2];

 //binary2decimal
 i=sc1[0]*2+sc1[3];
 j=sc1[1]*2+sc1[2];
 k=sc2[0]*2+sc2[3];
 l=sc2[1]*2+sc2[2];
 i=s0[i][j];
 binary(i,bin1);
 j=s1[k][l];
 binary(j,bin2);
 //4 bits are stored in sc1
 for(i=0;i<2;i++)
 {
  sc1[i]=bin1[i];
  sc1[i+2]=bin2[i];
 }
}
void swap(int a1[4],int a2[4],int a3[8])
{
  for(int i=0;i<4;i++)
  {
  a3[i]=a2[i];
  a3[i+4]=a1[i];
  }
}
void main()
{
 int i,j,pt[8],key[10],pt1[4],pt2[4],k1h[5],k2h[5],ct[8];
 int s0[4][4],s1[4][4],temp[10],subkey[8],sc1[4],sc2[4],li[4];
 clrscr();
 printf("Enter the 8 bit plain text:");
 for(i=0;i<8;i++)
  scanf("%d",&pt[i]);
 printf("Enter key:");
 for(i=0;i<10;i++)
  scanf("%d",&key[i]);

 ip(pt);
 p10(key);
 b4lshift(key,k1h,k2h);
 lshift(k1h);
 lshift(k2h);
 aflshift(k1h,k2h,temp,key);

 p8(temp,subkey);
  //round operation
 div_pt(pt,pt1,pt2);
 for(i=0;i<4;i++)
  li[i]=pt2[i];
 ep(pt2,pt);
 xor8(pt,subkey); //stores xor value in pt
 div_pt(pt,sc1,sc2);
 //sbox
 subs_choice(sc1,sc2); //sc1 stores the 4 bits
 p4(sc1);
 xor4(sc1,pt1);//xor value stored in sc1
 swap(li,sc1,ct);
 iip(ct);
 printf("\n\nThe cipher text is : ");
 for(i=0;i<8;i++)
  printf("%d ",ct[i]);
  getch();


}



No comments:

Post a Comment

^ Scroll to Top Related Posts with Thumbnails ^ Go to Top