Search Tutorials

Loading...

Friday, 24 May 2013

C code to Encrypt & Decrypt Message using Transposition Cipher

C program to implement Transposition Cipher to encrypt and decrypt a given message. This program is tested on Turbo C software.

#include<stdio.h>
#include<string.h>

void cipher(int i,int c);
int findMin();
void makeArray(int,int);

char arr[22][22],darr[22][22],emessage[111],retmessage[111],key[55];
char temp[55],temp2[55];
int k=0;

int main()
{
  char *message,*dmessage;

  int i,j,klen,emlen,flag=0;
  int r,c,index,min,rows;
  clrscr();

  printf("Enetr the key\n");
  fflush(stdin);
  gets(key);

  printf("\nEnter message to be ciphered\n");
  fflush(stdin);
  gets(message);

  strcpy(temp,key);
  klen=strlen(key);

  k=0;
  for(i=0; ;i++)
  {
    if(flag==1)
    break;

    for(j=0;key[j]!=NULL;j++)
    {
      if(message[k]==NULL)
       {
         flag=1;
         arr[i][j]='-';
       }
       else
       {
       arr[i][j]=message[k++];
       }
     }
  }
  r=i;
  c=j;

  for(i=0;i<r;i++)
  {
    for(j=0;j<c;j++)
    {
    printf("%c ",arr[i][j]);
    }
    printf("\n");
  }

k=0;

  for(i=0;i<klen;i++)
  {
   index=findMin();
   cipher(index,r);
  }

   emessage[k]='\0';
   printf("\nEncrypted message is\n");
   for(i=0;emessage[i]!=NULL;i++)
   printf("%c",emessage[i]);

   printf("\n\n");
   //deciphering

   emlen=strlen(emessage);
   //emlen is length of encrypted message

   strcpy(temp,key);

   rows=emlen/klen;
   //rows is no of row of the array to made from ciphered message
   rows;
   j=0;


   for(i=0,k=1;emessage[i]!=NULL;i++,k++)
    {
      //printf("\nEmlen=%d",emlen);
      temp2[j++]=emessage[i];
      if((k%rows)==0)
       {
       temp2[j]='\0';
       index=findMin();
       makeArray(index,rows);
       j=0;
       }
    }

    printf("\nArray Retrieved is\n");

     k=0;
     for(i=0;i<r;i++)
     {
    for(j=0;j<c;j++)
    {
    printf("%c ",darr[i][j]);
    //retrieving message
    retmessage[k++]=darr[i][j];

    }
    printf("\n");
     }
       retmessage[k]='\0';

     printf("\nMessage retrieved is\n");

     for(i=0;retmessage[i]!=NULL;i++)
     printf("%c",retmessage[i]);

  getch();
  return(0);
}

void cipher(int i,int r)
{
  int j;
  for(j=0;j<r;j++)
  {
    {
    emessage[k++]=arr[j][i];
    }
  }
 // emessage[k]='\0';
}

void makeArray(int col,int row)
{
 int i,j;

    for(i=0;i<row;i++)
       {
       darr[i][col]=temp2[i];
       }
}

int findMin()
{
  int i,j,min,index;

       min=temp[0];
       index=0;
       for(j=0;temp[j]!=NULL;j++)
       {
    if(temp[j]<min)
      {
      min=temp[j];
      index=j;
      }
       }

      temp[index]=123;
       return(index);
}

Output of the above program:-

C code to encrypt and decrypt a message using Transposition Cipher
Encrypted Message using Transposition Cipher

C code to encrypt and decrypt a message using Transposition Cipher
Decrypted Message using Transposition Cipher

For more c programs related to Network, See the Network label. Share and comment to improve this blog.

Related Programs:-

Encrypt and Decrypt a message using PlayFair Cipher

Calculate compression ratio

Java code to implement RSA Algorithm

Java code to implement MD5 Algorithm

Java code to send and receive Text or Image File

1 comment:

  1. looks like the cipher function is broken. there is mismatched braces, it should iterate over i as well.
    void cipher(int i,int r)
    {
    int j;
    for(j=0;j<r;j++)
    {
    {
    emessage[k++]=arr[j][i];
    }
    }
    // emessage[k]='\0';
    }

    ReplyDelete

Back to Top