PDA

Tam Sürümünü Görmek İçin : C ödevi (XOR la ilgili)


TheX
06/12/2006, 10:09
Şifrelenmemiş bir metni XOR kullanarak şifreleyen bir program yazmam gerekiyor.Programın şifreleme modülü makro olarak tanımlanmalı.Program Verilen argümanla bir key karakter '@' arasında XOR layarak sonucu vermeli.Ayrıca yapılan bu şifrelemeyi çözebilmeli.

#define key '@'
#define encrypt_XOR(x) …… /* (x XOR '@')*/
int main()
{
/* Test için bir karakter giriniz.****/
/* Test için bir string giriniz...****/
return 0;
}

Yardımlaırınız şimdiden çok tşk ederim...


acehreli
06/12/2006, 10:28
TheX, burada fikir soyle: sen yapmaya baslayacaksin, takildigin yerleri soracaksin; hep birlikte ogrenecegiz :)

Ali

cefurkan
06/12/2006, 12:43
evet :)

myavuzselim
06/12/2006, 15:25
C'de xor ^ isareti ile ifade ediliyor. Xor icin bilinen bir formul: (a^p)^p = a

Yani a'yi p ile xorlayinca "karman corman" birsey bulmana ragmen onu bir daha p ile xorlayinca tekrar a'ya kavusuyorsun.

Burada ilginc olan encrypt islemi ile decrypt islemi ayni.

TheX
06/12/2006, 18:27
#include <stdio.h>
#include <string.h>

#define key '@'
#define encrypt_XOR(x) ((x)^=key)

int main()
{
int i=0,size;
char str[50];

printf("Input a word that you want to encrypt:\n");
gets(str);
size=strlen(str);

printf("Word:%s\n",str);
printf("Encrypted Word:");
while(i<=(size-1))
{
printf("%c",encrypt_XOR(str[i]));
i++;
}
printf("\nDecrypted Word:");
i=0;
while(i<=(size-1))
{
printf("%c",encrypt_XOR(str[i]));
i++;
}
printf("\n");
return 0;
}
bu kodu düzenledim fakat stringdeki '\0' null karakterini şifrelemiyor sanırım.

acehreli
06/12/2006, 20:59
Sonlandirma karakterinin sifrelenmesini istemeyiz zaten, yoksa dizginin nerede bittigi anlasilmaz.

Bir not: Guvensiz gets yerine fgets'i kullanabilirsin. Yoksa 49'dan fazla karakter girildiginde program yanlis calisabilir.

Ali

myavuzselim
07/12/2006, 04:07
printf("Encrypted Word:");
while(i<=(size-1))
{
printf("%c",encrypt_XOR(str[i]));
i++;
}
printf("\nDecrypted Word:");
i=0;
while(i<=(size-1))
{
printf("%c",encrypt_XOR(str[i])); // str[i] zaten sifrelenmemis ki
i++;
}
Encrypt etmemissin ki decrypt ediyorsun ;)

TheX
07/12/2006, 18:35
Encrypt ettim yukarda fonksiyonu makro olarak tanımladım sanırım onu görmemişsin.
#define encrypt_XOR(x) ((x)^=key)

myavuzselim
07/12/2006, 19:03
Pardon, kacirmisim. Makrolar aldatiyor insani :)