Header Ads Widget

Ticker

6/recent/ticker-posts

To Implement Hill cipher encryption-decryption

 Program:

#include <stdio.h>

#include <math.h>

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

void encryption();

void decryption();

void getKeyMessage();

void inverse();

void main()

{

    getKeyMessage();

    encryption();

    decryption();
}

void encryption()

{

    int i, j, k;

    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("%c", (char)(fmod(encrypt[i][0], 26) + 97));
}

void decryption()

{

    int i, j, k;

    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("%c", (char)(fmod(decrypt[i][0], 26) + 97));

    printf("\n");
}

void getKeyMessage()

{

    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("%f", &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];

    printf("\n\nInverse Matrix is:\n");

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

    {

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

            printf("%d ", b[i][j]);

        printf("\n");
    }
}


Output:



Post a Comment

0 Comments