problem z szyfrowaniem XOR-em

0

Witam

Poruszę problem, który byl juz omawiany wielokrotnie. Mam jednak pewien problem.

chce zaszyfrowac tekst Xor-em z tą jednak różnicą żeby nigdy nie trafic na żaden znak zastrzeżony z tablic ASCII. Problem ten powstal gdy np. chcialem zakodowac litere 'j' przez litere 'a' czyli po zakodowaniu jest to dziesiętnie 11 a to w tablicy ASCII jest VT czyli Vertical Tab a co taka zamiana powoduje przy odkodowywaniu to chyba nikomu nie musze tlumaczyc:)
Co zrobic żeby nie natrafiać przy Xor-owaniu na znaki tego typu a wlasciwie jak przerobic ponizszy kod

char *napis;
int kod;

for (unsigned int i = 0 ; i<strlen(napis); i++)
{
napis[i] = napis[i] ^ kod;
}

Z góry dziękuje.

0

Zapraszam na strone http://gege01.prv.pl

Wybierz zakładke pomoce, wyszukaj temat pt. "Komplet sprawozdań z laboratorium algorytmów i struktur danych (3 semestr)." i wybierz spr_8

Znajdziesz tam informacje na temat szyfrowania XOR - może pomoże to rozwiązać Twój problem.

0

Ja napisałem coś takiego jak ponizej ale wydaje mi się że nie działa jak wpisujesz duże litery bo wtedy mogą wyjść błędy ale na małych używam jej już dobry rok i działało wprawdzie ciągle używam tego samego hasła ale dane się zmieniają i jakoś błędów nie było. Oto ta funkcja (mi potrzebny był AnsiString wrazie co można przebudować):

AnsiString koduj(AnsiString a,AnsiString b)
{
int i = 0;
int dl = 0;
char aa[90000] = "";//tekst do zakodowania
char wlasciwy[90000] = "";//tekst po zakodowaniu
char h[50];
AnsiString wlasciwystr = "";
strcpy(aa, a.c_str());
strcpy(h, b.c_str());
for(i = 0; h[i] != NULL; i++)//obliczanie długości hasła
{

}

dl = i;
i = 0;
for(int x = 0; aa[x] != NULL; x++)
{
if(aa[x] != h[i])//Zabezpieczenie przed znakami NULL w środku ciągu
{
wlasciwy[x] = aa[x]^h[i];
}
else
{
wlasciwy[x] = aa[x];
}
if(i == dl - 1)//obsługa hasła
{
i = -1;
}
i++;
}
wlasciwystr = wlasciwy;
return wlasciwystr;
}//koniec

0

a co taka zamiana powoduje przy odkodowywaniu to chyba nikomu nie musze tlumaczyc
Może powinieneś... bo po deszyfracji będziesz miał dokładnie to, co przed szyfrowaniem... nie wiem co Ci nie pasuje.

No ale jeśli już się upierasz przy tym, że chcesz mieć tylko znaki z klawiatury, to po szyfrowaniu zakoduj wynik Base64 i to wsio. Wynik oczywiście powiększy się o 33%.

1 użytkowników online, w tym zalogowanych: 0, gości: 1