Vigenere Cipher Algoritması

WiLdBoY

Altın Üye
Vigenere Cipher algoritması kullanarak yazmış olduğum bir tür şifreleme programı. İster dosyayı ister mesajınızı şifreleyin veya çözün.

Vigenere Cipher algoritmasının nasıl olduğunu merak edenler şu anlatımdan bakabilirler.
http://www.mutasyon.net/makaleoku.asp?id=799

Kod:
//code:W
#include <stdio.h>
#include <ctype.h>
#include <string.h>

char sifrele(char, char);
char sifreCoz(char, char);
char *strSifrele(char[], char[]);
char *strSifreCoz(char[], char[]);
void buyukYap(char[]);
void menuYaz();
void mesajSifrele();
void mesajCoz();
void dosyaSifrele();
void dosyaSifreCoz();

int main()
{
	int sec;
	do
	{
		menuYaz();
		scanf("%d",&sec);
		switch(sec)
		{
			case 1:
				mesajSifrele();
				break;
			case 2:
				mesajCoz();
				break;
			case 3:
				dosyaSifrele();
				break;
			case 4:
				dosyaSifreCoz();
				break;
		}
	}while(sec!=0);
	return 0;
}

char sifrele(char c1, char c2)
{
	char x;
	if (c1-65+c2 > 90)
		x=c2-(26-(c1-65));
	else
		x=c2+(c1-65);
	return x;
}

char sifreCoz(char c1, char c2)
{
	char x;
	if (c1-c2 < 0)
		x=91+c1-c2;
	else
		x=65+c1-c2;
	return x;
}

char *strSifrele(char str[], char key[])
{
	char tekrarli[100];
	char kod[100];
	char encoded[100];
	int i,y,yer=0,anh=0;
	buyukYap(str);
	buyukYap(key);
	while(str[yer]!='\0') yer++;
	for (i=0;i<yer;i++)
	{
		if (key[anh] == '\0')
			anh=0;
		tekrarli[i]=key[anh++];
	}
	tekrarli[i]='\0';
	for (y=0;str[y]!='\0';y++)
		kod[y]=sifrele(str[y],tekrarli[y]);
	kod[y]='\0';
	strcpy(encoded,kod);
	return encoded;
}

char *strSifreCoz(char str[], char key[])
{
	char tekrarli[100];
	char kod[100];
	char decoded[100];
	int i,y,yer=0,anh=0;
	buyukYap(key);
	while(str[yer]!='\0') yer++;
	for (i=0;i<yer;i++)
	{
		if (key[anh] == '\0')
			anh=0;
		tekrarli[i]=key[anh++];
	}
	tekrarli[i]='\0';
	for (y=0;str[y]!='\0';y++)
		kod[y]=sifreCoz(str[y],tekrarli[y]);
	kod[y]='\0';
	strcpy(decoded,kod);
	return decoded;
}

void mesajSifrele()
{
	char str[100];
	char anahtar[50];
	char kod[100];
	printf("\nSifrelenecek cumleyi girin: ");
	getchar();
	gets(str);
	printf("Anahtari girin: ");
	scanf("%s",anahtar);
	strcpy(kod,strSifrele(str,anahtar));
	printf("Mesaj Sifrelendi..\n");
	printf("\nSifrelenmis Hali -> %s\n",kod);
}

void mesajCoz()
{
	char str[100];
	char anahtar[50];
	char kod[100];
	printf("\nSifrelenmis cumleyi girin: ");
	getchar();
	gets(str);
	printf("Anahtari girin: ");
	scanf("%s",anahtar);
	strcpy(kod,strSifreCoz(str,anahtar));
	printf("Mesaj Sifresi Cozuldu\n");
	printf("\nMesaj -> %s\n",kod);
}

void dosyaSifrele()
{
	FILE *fin,*fout;
	char str[100];
	char in[20], out[20];
	char anahtar[50];
	char kod[100];
	int i;
	printf("\nSifrelenecek dosyanin ismini girin: ");
	getchar();
	gets(in);
	printf("Sifreli dosya hangi isimle kaydedilsin: ");
	gets(out);
	printf("Anahtari girin: ");
	scanf("%s",anahtar);
	fin=fopen(in,"r");
	fout=fopen(out,"w");
	if (fin == NULL)
		printf("Girdiginiz dosya acilamadi!!!\n");
	else {
		for (i=0;!feof(fin);i++)
			str[i]=getc(fin);
		str[i]='\0';
		strcpy(kod,strSifrele(str,anahtar));
		fprintf(fout,"%s",kod);
	}
	printf("\n%s dosyasi sifrelendi ve %s dosyasina yazildi...\n",in,out);
	fclose(fin);
	fclose(fout);
}

void dosyaSifreCoz()
{
	FILE *fin;
	char str[100];
	char in[20];
	char anahtar[50];
	char kod[100];
	int i;
	printf("\nSifresi cozulecek dosyanin ismini girin: ");
	getchar();
	gets(in);
	printf("Anahtari girin: ");
	scanf("%s",anahtar);
	fin=fopen(in,"r");
	if (fin == NULL)
		printf("Girdiginiz dosya acilamadi!!!\n");
	else {
		for (i=0;!feof(fin);i++)
			str[i]=getc(fin);
		str[i]='\0';
		strcpy(kod,strSifreCoz(str,anahtar));
	}
	printf("\n%s dosyasinin sifresi cozuldu...\n",in);
	printf("\n%s\n",kod);
	fclose(fin);
}

void buyukYap(char str[])
{
	for (int i=0;str[i]!='\0';i++)
		str[i]=toupper(str[i]);
}

void menuYaz()
{
	printf("\n*** Vigenere Cipher Kriptoloji Algoritmasi ***\n");
	printf("\n[1] Mesaj Sifrele\n");
	printf("[2] Mesaj Sifresi Coz\n");
	printf("[3] Dosya Sifrele\n");
	printf("[4] Sifreli Dosyayi Coz\n");
	printf("\n[0] Cikis\n");
	printf("\nSeciminiz: ");
}
 

HTML

Üst