C code to Encrypt & Decrypt Message using Transposition Cipher


Levels of difficulty: / perform operation:

C-code-to-encrypt-and-decrypt-a-message-using-Transposition-cipher

C-code-to-encrypt-and-decrypt-a-message-using-Transposition-cipher-2

C Program

#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);
}