Monday, March 30, 2015

Hill Cipher Implementation C++

Hill Cipher C++ Code

#include<iostream>
#include<string.h>
using namespace std;

class HillCipher
{
char plain[99],temp[4],cipher1[4],cipher[99],cipher2[99];
int key[3][3],i,j,k,pL,PT[3],n,count,temp2,j1,k1,c[3],z,tt;

public:
HillCipher(){count=0; }

void GetPlain()
{
cout<<"\t\t\t *** ENTER PLAIN TEXT ***"<<endl<<endl;
gets(plain);
}

void PlainModification()
{
pL=strlen(plain);
if(pL%3==1)
{
for(i=pL;i<pL+2;i++)
{
plain[i]='x';
}
plain[i]='\0';
}
if(pL%3==2)
{
for(i=pL;i<pL+1;i++)
{
plain[i]='x';
}
plain[i]='\0';
}
}

void GetKey()
{
cout<<endl<<"\t\t\t *** ENTER KEY ***"<<endl<<endl;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cin>>key[i][j];
}
}
}

void DisplayKey()
{

cout<<"\t\t\t *** KEY IS *** "<<endl<<endl;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cout<<"\t\t"<<key[i][j];
}
cout<<endl;
}
}

void PlainSend()
{
pL=strlen(plain);
for(i=0;i<pL;i=i+3)
{
for(k=0,j=i;k<3,j<i+3;k++,j++)
{
temp[k]=plain[j];
}
temp[3]='\0';
FindNumber();
}

}

void FindNumber()
{
for(n=0;n<3;n++)
{
PT[n]=temp[n]-97;
}
MatricMul();
}

void MatricMul()
{
for(j1=0;j1<3;j1++)
{
temp2=0;
for(k1=0;k1<3;k1++)
{
temp2=temp2+key[k1][j1]*PT[k1];
}
c[j1]=temp2;
}
Encryption();
}

void Encryption()
{
for(n=0;n<3;n++)
{
c[n]=c[n]%26;
}
for(n=0;n<3;n++)
{
cipher1[n]=c[n]+97;
}
cipher1[3]='\0';
UpdateCipher();

}

void UpdateCipher()
{
count++;
tt=(count-1)*3;
for(z=0,n=tt;z<3,n<pL;z++,n++)
{
cipher[n]=cipher1[z];
}

}

void DisplayCipher()
{
cout<<endl<<"\t\t\t *** CIPHER TEXT IS ***"<<endl<<endl<<"\t\t\t ";
for(z=0;z<count*3;z++)
{
cout<<cipher[z];
}
cout<<endl<<endl<<"\t\t\t *** END OF PROGRAM *** "<<endl;
}

};

int main()
{
HillCipher h1;
h1.GetPlain();
h1.PlainModification();
h1.GetKey();
h1.DisplayKey();
h1.PlainSend();
h1.DisplayCipher();

return 0;
}

Saturday, March 21, 2015

Playfair cipher implementation in c

Code

/*
#PLAYFAIR CIPHER C IMPLEMENTATION
*/

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

int main()
{

// START OF INITIALIZATION

char a[9],mk[99],table[5][5],in[88];
int i,k,key_leagth,j,cn=0,sl,ct=0,m=0,inl,c1,c2,r1,r2,tst=0,length_plain;

//END OF INITIALIZATION


// INPUT KEY AND TAKE ALL ALPHABET

printf("\t \t \t*** ENTER KEY ***\n \n \n");
gets(a);
key_leagth=strlen(a);
strcpy(mk,a);
for(i=key_leagth;i<26+key_leagth;i++)
{
mk[i]=97+cn;
cn++;
}

//MAKE UNIQUE 25 ALPHABET

printf("\t \t \t*** REQUIRED MATRIX IS ***\n \n \n");

k=strlen(mk);
while(sl>26)
{
for(i=1;i<k;i++)
{
for(j=0;j<i;j++)
{
if(mk[i]==mk[j] || mk[i]=='j')
{
for(j=i;j<k;j++)
{
mk[j]=mk[j+1];
}
}
}
}
i=1;
sl=strlen(mk);
ct++;
if(sl!=26 && ct==5)
break;
}

//MAKE 5*5 MATRIX

for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(mk[m]!='j')
{
table[i][j]=mk[m];

}
m++;
if(mk[m]!='j')
printf("\t%c\t",table[i][j]);
}
printf("\n");
}

//MANIPULATION OF INPUT PLAIN TEXT

printf("\n \n \t \t \t*** ENTER PLAIN TEXT ***\n \n \n");

gets(in);
length_plain=strlen(in);
  for(i=0;i<length_plain;i=i+2)
    {
        if(in[i]==in[i+1])
        {
            for(j=length_plain;j>=i+1;j--)
            {
                in[j+1]=in[j];
            }
            in[i+1]='x';
            length_plain++;
        }
    }
    if(length_plain%2==1)
    {
        in[length_plain+1]='\0';
        in[length_plain]='x';

    }
   
    //CONVERT 'J' TO 'I'
   
    inl=strlen(in);
 
    for(i=0;i<inl;i++)
    {
    if(in[i]=='j')
    in[i]='i';
    }
   
    /*
CIPHER TEXT MAKING
    CORE ENCRYPTION PART
    */
   
    printf("\n \n \t \t \t*** CIPHER TEXT ***\n \n \n");
   

for(k=0;k<inl;k=k+2)
{
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(table[i][j]==in[tst])
{

r1=i;
c1=j;
}
if(table[i][j]==in[tst+1])
{
r2=i;
c2=j;
}
}
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
if(r1==r1)
{

in[tst]=table[r1][(c1+1)%5];
in[tst+1]=table[r2][(c2+1)%5];
}
if(c1==c2)
{
in[tst]=table[(r1+1)%5][c1];
in[tst+1]=table[(r2+1)%5][c2];
}
if(c1!=c2 && r1!=r2)
{
in[tst]=table[r1][c2];
in[tst+1]=table[r2][c1];
}
}
}

printf("%c%c",in[tst],in[tst+1]);
tst=tst+2;
}
printf("\n \n \t \t \t*** END OF PROGRAM ***\n \n \n");

return 0;

}