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"));
}