Hill Cipher Program

*PROGRAM*

 #include<stdio.h>

#include<conio.h>

#include<math.h>

float encrypt[3][1], decrypt[3][1], a[3][3], b[3][3], mes[3][1], c[3][3];


int encryption();

void decryption();

void Key();

void inverse();

 

int main() 

{

    int choice;

    do

    {

printf("\n\n1. Encryption");

printf("\n2. Decryption");

printf("\n3. Exit");

printf("\nEnter your Choice: ");

scanf("%d",&choice);

         switch(choice)

                {

     case 1:

encryption();

break;

case 2:

decryption();

break;

case 3:

exit(0);

default:

printf("Wrong choice!!!");

       }

        }while(choice!=3);

        return 0;

}

 

int encryption() {

int i, j, k;

Key();

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

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

for(k = 0; k < 3; k++)

encrypt[i][j] = encrypt[i][j] + a[i][k] * mes[k][j];

printf("\nEncrypted string is: ");

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

printf((char)(fmod(encrypt[i][0], 26) + 97));

return 0;

}

 

void decryption() {

int i, j, k;

Key();

inverse();

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

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

for(k = 0; k < 3; k++)

decrypt[i][j] = decrypt[i][j] + b[i][k] * encrypt[k][j];

printf("\nDecrypted string is: ");

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

printf((char)(fmod(decrypt[i][0], 26) + 97));

printf("\n");

}

 

void Key() {

int i, j;

char msg[3];

 

printf("Enter 3x3 matrix for key (It should be inversible):\n");

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

for(j = 0; j < 3; j++) {

scanf("%d %d",&a[i][j]);

c[i][j] = a[i][j];

}

printf("\nEnter a 3 letter string: ");

scanf("%s",&msg);

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

mes[i][0] = msg[i] - 97;

}

 

void inverse() {

int i, j, k;

float p, q;

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

for(j = 0; j < 3; j++) {

if(i == j)

b[i][j]=1;

else

b[i][j]=0;

}

for(k = 0; k < 3; k++) {

for(i = 0; i < 3; i++) {

p = c[i][k];

q = c[k][k];

for(j = 0; j < 3; j++) {

if(i != k) {

c[i][j] = c[i][j]*q - p*c[k][j];

b[i][j] = b[i][j]*q - p*b[k][j];

}

}

}

}

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

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

b[i][j] = b[i][j] / c[i][i];

}

*OUTPUT*

No comments:

Post a Comment