vigenere.cpp

//Vigenere Cipher
//Copyright (C) 2006 ismail Ata Kurt 
//http://blog.livaxmedia.com

#include "stdafx.h"
#include  
#include  
  
char vigenere_table[26][26];
char s_vigenere_table[26][26];

void create_vigenere_table(int k) {
	int i,s;
	for(i=0;i<26;i++) {
		for(s=0;s<26;s++) {
			vigenere_table[i][s] = 65+(s+i+k)%26;
			s_vigenere_table[i][s] = 97+(s+i+k)%26;
			
		}
		
	}
	
}

char *encrypt(char *text,char *key) {
	
	int i;
	char *temp = new char;
	char keyChar_U;
	char keyChar_L;
	
	
	

	for(i=0;i<(int)strlen(text);i++){
		
		keyChar_U= toupper(key[i%strlen(key)]);
		keyChar_L= tolower(key[i%strlen(key)]);

		if((int)text[i]>96 && (int)text[i] <123) {
			temp[i] = s_vigenere_table[(int)keyChar_L-97][(int)text[i]-97];
		}else if ((int)text[i]>64 && (int)text[i] <91){
			temp[i] =vigenere_table[(int)keyChar_U-65][(int)text[i]-65];			
		}else {
			temp[i] = text[i];
		}
		
	}	
	temp[i] = '\0';
	return temp;

}
char *decrypt(char *text,char *key) {
	
	int i,s;
	char *temp = new char;
	char keyChar_U;
	char keyChar_L;
	
	
	

	for(i=0;i<(int)strlen(text);i++){
		
		keyChar_U= toupper(key[i%strlen(key)]);
		keyChar_L= tolower(key[i%strlen(key)]);

		if((int)text[i]>96 && (int)text[i] <123) {
			for(s=0;s<26;s++) {
				if(text[i] == vigenere_table[(int)keyChar_L-97][s]) {
					temp[i]= 97 + s % 26;
					break;
				}
			}		
		}else if ((int)text[i]>64 && (int)text[i] <91){
			for(s=0;s<26;s++) {
				if(text[i] == vigenere_table[(int)keyChar_U-65][s]) {
					temp[i]= 65 + s % 26;
					break;
				}
			}


		}else {
			temp[i] = text[i];
		}
		
	}
	temp[i] = '\0';
	return temp;
}

void main(int argc, char* argv[])
{

	create_vigenere_table(0);	
	
	printf("Plain Text  : %s\n",decrypt(encrypt("ATTACKATDAWN","LEMON"),"LEMON"));	
 	printf("Key         : LEMON\n");
	printf("Cipher Text : %s\n",encrypt("ATTACKATDAWN","LEMON"));
	
	
}