Autor Wątek: algorytm xor  (Przeczytany 1303 razy)

Offline Neghe

  • Użytkownik

# Marzec 26, 2006, 20:45:09
Pisze program do szyfrowania/desdzyfrowania różnymi algorytmami izaciąłem się chyba przy jednym z łatwiejszych, a mianowicie przy operacji XOR.
Jest tak: pobieram po bajcie z tekstu, zamieniam to na kod ascii potem na system binarny. W nastepnej kolejnosci wykonuje na tych bitach operacje XOR w oparciu o klucz i powstałą liczbę a raczej jej odpowednikiem w ascii zastępuję szyfrowany znak tekstu. Ale w tym wszystkim jest jeden problem. Jeżeli znak tekstu jest identyczny jak klucz, wtedy wynikiem będzie 0. A 0 w ascii to taki dziwny znak, wlasciwie to nie znak, nie wiem co on symbolizuje ale jak mam go w lancuchu znakow, to znaki nastepujace po nim sa niewidoczne, lecz dlugosc sie zgadza. Jak obejsc ten problem?

Dam jeszce kod:
  String* Bufor = new String;
  *Bufor = "";
  psbPasek->Visible = TRUE;
  psbPasek->Max = memTekst->Text.Length()/2;
  int ile = 0;
  String Klucz = "01000101";
  for (int i = 1; i <= memTekst->Text.Length(); i++)
  {
   UINT uintZnak = memTekst->Text[i];
   if (uintZnak > 128)
   {
   *Bufor += memTekst->Text[i];
   continue;
   }
   String bity = LiczbaNaSystemBinarny(uintZnak);
   String BityWynikowe = "";
   for (int j = 1; j <= 8; j++)
   {
if (bity[j] == Klucz[j])
BityWynikowe += '0';
else
BityWynikowe += '1';
   }
   UINT LiczbaW = ZSystemuBinarnegoNaLiczbe(BityWynikowe);
   if (LiczbaW == 0) LiczbaW = 1;
   *Bufor += (char)LiczbaW;
   ile++;
   if (ile == 2)
   {
   ile = 0;
   psbPasek->Position += 1;
   Application->ProcessMessages();
   }
  }
  memTekst->Text = *Bufor;
  delete Bufor;
  psbPasek->Position = 0;
  psbPasek->Visible = FALSE;
  StatusBar->Text = "";


// MODTEAM: PROSIMY UŻYWAć ODPOWIEDNICH ZNACZNIKÓW : [code/code]
« Ostatnia zmiana: Marzec 26, 2006, 21:45:24 wysłana przez shyha »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

agent_J

  • Gość
# Marzec 26, 2006, 20:49:07
Po prostu nie używaj bufora wyjściowego tekstowego tylko binarnego, albo rób kodowanie wyjścia metodą base64, co będzie IMO najlepsze.
http://en.wikipedia.org/wiki/Base64

Offline Neghe

  • Użytkownik

# Marzec 26, 2006, 21:59:24
dzięki za fatyge