To implement columnar transposition cipher encryption-decryption in C. (WITH OUTPUT IMAGE)


#include<stdio.h>
#include<conio.h>

void main()
{
int i,j,k[5],count=0,istop,jstop,stop,flag=0,plen,mod,devide;
char p[100],p1[5][20],newm[5][20],e[100],d[100];
clrscr();
printf("Enter plain text::::::");
gets(p);

for(i=0;i<20;i++)
{ for(j=0;j<5;j++)
  { if(p[count]!=32&&p[count]!='\0')
    p1[i][j]=p[count++];

    else if(p[count]==32)
    count++;

    else
    {istop=i;jstop=j;
     flag=1;
     break;
    }
  }
  if(flag==1)
  break;
}
flag=0;

for(i=0;i<20;i++)
{ printf("\n");
  if(i==istop)
  {stop=jstop;
  flag=1;
  }
  else
  stop=5;

  for(j=0;j<stop;j++)
  {printf("%c",p1[i][j]);
  }
  if(flag==1)
  break;
}

p1[i][j]='\0';
plen=istop*5+jstop;
//printf("%d",plen);

printf("\n ENTER KEY (NUMBER OF 5 COLOUMNS BETWEEN 1TO5)");

for(i=0;i<5;i++)
scanf("%d",&k[i]);

//ENCRYPTION PART:::::::::::::::::::::::::::::::::::::::::::::::
count=0;
for(i=0;i<5;i++)
{ for(j=0;j<20;j++)
  {
    if(p1[j][k[i]-1]!='\0')
    {e[count]=p1[j][k[i]-1];
    e[count+1]='\0';
    count++;
    }

    else
    break;
  }
}
printf("\n ENCRYPTED TEXT::::::::::::");
for(i=0;i<plen;i++)
printf("%c",e[i]);



//DECRTYPTION PART:::::::::::::::
devide=plen/5;
mod=plen%5;
count=0;

for(i=0;i<5;i++)
{ printf("\n");
  for(j=0;j<devide+1;j++)
  {
     if(j==devide&&k[i]>mod)
     newm[j][i]='\0';

     else
    newm[j][i]=e[count++];

  }
}

for(i=0;i<devide+1;i++)
{ printf("\n");
  for(j=0;j<5;j++)
  {
    printf("%c",newm[i][j]);
  }
}

count=0;
for(i=0;i<devide+1;i++)
{
for(j=0;j<5;j++)
  {
    if(newm[i][k[j]-1]!='\0')
    {d[count]=newm[i][k[j]-1];
    d[count+1]='\0';
    count++;
    }
  }
}
d[count]='\0';
printf("\n DECRYPTED TEXT:::::::");
for(i=0;i<plen;i++)
printf("%c",d[i]);

//printf("%d",'\0');
getch();
}


OUTPUT:

Comments