PlayFair Cipher Program

 *PROGRAM*

#include<stdio.h>

#include<string.h>

#include<ctype.h>

int removerepeated(int size,int a[]);

int insertelementat(int position,int a[],int size);


int main()

{

int i,j,k,numstr[100],numcipher[100],numkey[100],lenkey,templen,tempkey[100],flag=-1,size,cipherkey[5][5],lennumstr,row1,row2,col1,col2;

char str[100],key[100];

int choice;

do

{

printf("\n1. Encryption");

printf("\t2. Decryption");

printf("\t3. Exit");

printf("\nEnter Choice:");

scanf("%d",&choice);

switch(choice)

{

case 1:

printf("Enter a string\n");

scanf("%s",&str);


for(i=0,j=0;i<strlen(str);i++)

{

if(str[i]!=' ')

{

str[j]=toupper(str[i]);   

j++;

}

}

str[j]='\0';

printf("Entered String is %s\n",str);

size=strlen(str);


for(i=0;i<size;i++)

{

if(str[i]!=' ')

numstr[i]=str[i]-'A';

}

lennumstr=i;

printf("Enter the key (Non repeated elements if possible)\n");

scanf("%s",&key);


for(i=0,j=0;i<strlen(key);i++)

{

if(key[i]!=' ')

{

key[j]=toupper(key[i]);   

j++;

}

}

key[j]='\0';

k=0;


for(i=0;i<strlen(key)+26;i++)

{

if(i<strlen(key))

{

if(key[i]=='J')

{

flag=8;

printf("%d",flag);

}

numkey[i]=key[i]-'A';   

}

else

{

if(k!=9 && k!=flag)

{

numkey[i]=k; 

}

k++;

}

}

templen=i;

lenkey=removerepeated(templen,numkey);

k=0;

for(i=0;i<5;i++)

{

for(j=0;j<5;j++)

{

cipherkey[i][j]=numkey[k];   

k++;

}

}    


for(i=0;i<lennumstr;i+=2)

{

if(numstr[i]==numstr[i+1])

{

insertelementat(i+1,numstr,lennumstr);

lennumstr++;

}

}


if(lennumstr%2!=0)

{

insertelementat(lennumstr,numstr,lennumstr);

lennumstr++;

}


for(k=0;k<lennumstr;k+=2)

{

for(i=0;i<5;i++)

{

for(j=0;j<5;j++)

{

if(numstr[k]==cipherkey[i][j])

{

row1=i;

col1=j;       

}

if(numstr[k+1]==cipherkey[i][j])

{

row2=i;

col2=j;       

}

}

}

if(row1==row2)

{

col1=(col1+1)%5;

col2=(col2+1)%5;

numcipher[k]=cipherkey[row1][col1];

numcipher[k+1]=cipherkey[row2][col2];

}

if(col1==col2)

{

row1=(row1+1)%5;

row2=(row2+1)%5;

numcipher[k]=cipherkey[row1][col1];

numcipher[k+1]=cipherkey[row2][col2];

}


if(row1!=row2&&col1!=col2)

{

numcipher[k]=cipherkey[row1][col2];

numcipher[k+1]=cipherkey[row2][col1];

}


printf("Cipher Text is\n");


for(i=0;i<lennumstr;i++)

{

printf("%c",numcipher[i]+'A'); 

}

printf("\n");

break;

case 2:

printf("Enter a string\n");

  scanf("%s",&str);

  for(i=0,j=0;i<strlen(str);i++)

{

if(str[i]!=' ')

{

str[j]=toupper(str[i]);   

j++;

}

}

str[j]='\0';

printf("Entered String is %s\n",str);


size=strlen(str);

for(i=0;i<size;i++)

{

if(str[i]!=' ')

numstr[i]=str[i]-'A';

}

lennumstr=i;

printf("Enter the key (Non repeated elements if possible)\n");

scanf("%s",&key);

  for(i=0,j=0;i<strlen(key);i++)

{

if(key[i]!=' ')

{

key[j]=toupper(key[i]);   

j++;

  }

  }

key[j]='\0';

printf("%s\n",key);

  k=0;

for(i=0;i<strlen(key)+26;i++)

{

if(i<strlen(key))

{

    if(key[i]=='J')

    {

flag=8;

printf("%d",flag);

    }

numkey[i]=key[i]-'A';   

  }

else

{

    if(k!=9 && k!=flag)

    {

numkey[i]=k; 

      }

      k++;

}

  }

templen=i;

lenkey=removerepeated(templen,numkey);

printf("Entered key converted according to Play Fair Cipher rule\n");

for(i=0;i<lenkey;i++)

  {

printf("%c",numkey[i]+'A');  

  }

printf("\n");

k=0;

for(i=0;i<5;i++)

  {

for(j=0;j<5;j++)

  {

    cipherkey[i][j]=numkey[k];   

    k++;

  }

  }

printf("Arranged key\n");

for(i=0;i<5;i++)

  {

  for(j=0;j<5;j++)

{

printf("%c ",cipherkey[i][j]+'A');

}

printf("\n");

}

   

    for(i=0;i<lennumstr;i+=2)

    {

if(numstr[i]==numstr[i+1])

{

insertelementat(i+1,numstr,lennumstr);

lennumstr++;

}

}

if(lennumstr%2!=0)

{

insertelementat(lennumstr,numstr,lennumstr);

lennumstr++;

}

printf("Entered String/Message After Processing according to Play fair cipher rule\n");

for(i=0;i<lennumstr;i++)

{

printf("%c",numstr[i]+'A');

}

for(k=0;k<lennumstr;k+=2)

{

for(i=0;i<5;i++)

{

for(j=0;j<5;j++)

{

if(numstr[k]==cipherkey[i][j])

{

row1=i;

col1=j;       

}

if(numstr[k+1]==cipherkey[i][j])

{

row2=i;

col2=j;       

}

}

    }

    if(row1==row2)

{

col1=(col1-1)%5;

col2=(col2-1)%5;

if(col1<0)

{

col1=5+col1;

      }

if(col2<0)

{

    col2=5+col2;

}

numcipher[k]=cipherkey[row1][col1];

numcipher[k+1]=cipherkey[row2][col2];

}

if(col1==col2)

{

row1=(row1-1)%5;

row2=(row2-1)%5;

if(row1<0)

{

row1=5+row1;

      }

 

if(row2<0)

{

row2=5+row2;

}

numcipher[k]=cipherkey[row1][col1];

numcipher[k+1]=cipherkey[row2][col2];

    }

if(row1!=row2&&col1!=col2)

{

numcipher[k]=cipherkey[row1][col2];

numcipher[k+1]=cipherkey[row2][col1];

}

printf("\nCipher Text is\n");

for(i=0;i<lennumstr;i++)

{

    if((numcipher[i]+'A')!='X');

printf("%c",numcipher[i]+'A'); 

}

printf("\n");

break;

case 3: break;

}

}while(choice<3);

return 0;

}


int removerepeated(int size,int a[])

{

int i,j,k;

for(i=0;i<size;i++)

{

for(j=i+1;j<size;)

{

if(a[i]==a[j])

{

for(k=j;k<size;k++)

{

a[k]=a[k+1];

}

size--;

}

else

{

j++;

}  

}

}

return(size);

}


int insertelementat(int position,int a[],int size)

{

int i,insitem=23,temp[size+1];

for(i=0;i<=size;i++)

{

if(i<position)

{

temp[i]=a[i];

}

if(i>position)

{

temp[i]=a[i-1];    

}

if(i==position)

{

temp[i]=insitem;

}

}        

for(i=0;i<=size;i++)

{

a[i]=temp[i];

}

}

  *OUTPUT*

No comments:

Post a Comment