Write a C program for Polyalphabetic Cipher.
Post date: Feb 14, 2012 12:0:34 PM
#include<stdio.h>
#include<conio.h>
int poly_enc(FILE *plain,FILE *cipher);
int poly_dec(FILE *plain,FILE *cipher);
void init_table();
char lookup(char key,char ch);
void main()
{
FILE *plain,*cipher,*dec;
// clrscr();
plain=fopen("txt.txt","r+b");
cipher=fopen("cip.txt","w+b");
dec=fopen("dec.txt","w+b");
printf("\nEncryting....\n");
poly_enc(plain,cipher);
printf("\nDecrypting...\n");
poly_dec(cipher,dec);
fclose(plain);
fclose(cipher);
fclose(dec);
printf("\nDone.");
getch();
}
char table[26][26];
void init_table()
{
int i,j,k,flag;
for(i=0;i<26;i++)
{
flag=0;
for(j=i,k=0;j<i || flag == 0;j++,k++)
{
if(j>=26)
{
j=0;
flag=1;
}
table[i][k]=j+97;
// printf("%c ",table[i][k]);
}
// printf("\n");
}
delay(100);
}
int poly_enc(FILE *src,FILE *dsn)
{
char key[20],ch;
long fctr,fsize;
int kctr,klen;
init_table();
printf("Enter the Key:");
fflush(stdin);
gets(key);
fseek(src,0,2);
fsize=ftell(src);
fseek(src,0,0);
klen=strlen(key);
for(fctr=0,kctr=0;fctr<fsize;fctr++,kctr++)
{
if(kctr>=klen) kctr=0;
ch=tolower(getc(src));
if(isalpha(ch))
{
putc(table[key[kctr]-97][ch-97],dsn);
printf("%c",table[key[kctr]-97][ch-97]);
}
else
{
putc(ch,dsn);
printf("%c",ch);
}
}
return 1;
}
int poly_dec(FILE *src,FILE *dsn)
{
char key[20],ch;
long fctr,fsize;
int kctr,klen;
init_table();
printf("Enter the Key:");
fflush(stdin);
gets(key);
fseek(src,0,2);
fsize=ftell(src);
fseek(src,0,0);
klen=strlen(key);
for(fctr=0,kctr=0;fctr<fsize;fctr++,kctr++)
{
if(kctr>=klen) kctr=0;
ch=tolower(getc(src));
if(isalpha(ch))
{
putc(lookup(key[kctr]-97,ch-97),dsn);
printf("%c",lookup(key[kctr]-97,ch-97));
}
else
{
putc(ch,dsn);
printf("%c",ch);
}
}
return 1;
}
char lookup(char key,char ch)
{
int i;
for(i=0;table[i][key] != ch;i++);
return(table[0][i-1]);
}