Kodowanie tekstu w Pascalu

Strona g│≤wna

 

Kodowanie 

Kodowanie wcale nie musi byµ tak trudne. Podstaw▒ programu koduj▒cego musi byµ algorytm szyfruj▒cy jakie╢ dane. Zabezpieczone to musi byµ has│em tak, aby szyfrowane s│owo + has│o r≤wna│o siΩ zakodowany tekst. Pierwsza metoda kodowania...

Metoda xorowania

C≤┐, nazwa nie m≤wi wiele. W Pascalu ( w Turbo Pascalu jak i w Delphi ) wykorzystana jest do tego procedura XOR. Oops, sorki nie jest to procedura, ale operator! Operuje on na bitach. Mo┐esz wiΩc zapisaµ tak:

Wynik := 20 xor 5;

Tak wiΩc do zmiennej Wynik zapisali╢my wynik xorowania liczby 20 przez 5. Co to w│a╢ciwie znaczy? Ot≤┐ systemy operuj▒ systemem dw≤jkowym - same zera lub jedynki. W naszym przypadku liczba 20 mo┐e byµ liczb▒, kt≤r▒ chcemy zaszyfrowaµ, a cyfra 5 mo┐e byµ has│em. Tak jak powiedzia│em system operuje na systemie zer i jedynek ( binarnym ). Mo┐emy wiΩc zapisaµ w postaci binarnej tak:

20 = 1110000
5  = 0001111

Xorowanie to zestawianie tych zer i jedynek. Je┐eli dwa por≤wnywane bity s▒ takie same to rezultat bΩdzie w postaci cyfry 0. [ je┐eli bit 1 = 0 oraz bit 2 = 0 to wynik bΩdzie cyfr▒ 0 ). W przeciwnym wypadku ( je┐eli dwa por≤wnywane typy bΩd▒ r≤┐ne ) rezultatem bΩdzie cyfra 1. 

Oto przyk│ad zaszyfrowania ( xorowania ) liczby 20:

var
  X, Y, Z : Integer;
begin
  X := 20; // kodowana liczba
  Y := 5;  // has│o
  Z := X xor Y;

Zmienna Z bΩdzie zawieraµ liczbΩ 17. »eby to teraz rozszyfrowaµ nale┐y przestawiµ parametry.  

var
  X, Y, Z : Integer;
begin
  Z := 17; // wynik - Z
  Y := 5;  // has│o
  X := Z xor Y;   // <-- szukany parametr X

Zmienna X bΩdzie zawieraµ liczbΩ 20. TrochΩ trudniej ma siΩ sprawa z warto╢ciami w postaci zmiennych tekstowych. Tutaj bowiem nale┐y ka┐d▒ literΩ przekszta│ciµ do postaci liczby, a nastΩpnie zexorowaµ. 

Listing 11.1


  function Szyfruj(sString, Password : String) : String;
  var
    I : Integer;
    PassCount : Integer;
  begin
    PassCount := 0;
    Result := sString; // przypisz wartosc poczatkowa
    for I := 1 to Length(sString) do  // wykonuj dla kazdej litery osobno
    begin
{
   Dla kazdego osobnego znaku zamieniaj na wartosc liczbowa, a nastepnie
   xoruj z kazda litera hasla - powstaje wowczas unikalna kombinacja.
}
      Result[i] := Chr(Ord(sString[i]) xor Ord(Password[PassCount]));
      Inc(PassCount);   // wieksz licznik - kolejne slowo hasla
      { Jezeli licznik przekroczy dlugosc hasla - wyzeruj }
      if PassCount > Length(Password) then PassCount := 0; 
    end;
  end;

Tak jak m≤wi│em z tekstem jest trochΩ trudniej. W tym wypadku pΩtla ka┐dy znak tekstu por≤wnuje ze znakiem has│a. 

Metoda odejmowania

To o wiele prostsza metoda - polega na odejmowaniu od liczby 255 numeru znaku. Liczba 255 to najwiΩksza liczba jak▒ mo┐e przyj▒µ jeden bajt. M≤wi▒c inaczej ka┐dy znak ma sw≤j numer ASCII. 
( numery wszystkich klawiszy mo┐esz poznaµ ╢ci▒gaj▒c choµby malutki programik ASCII ). 

Mo┐esz np. oprogramowaµ zdarzenie OnKeyPress, kt≤re wystΩpuje po naci╢niΩciu klawisza. Oto procedura:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  ShowMessage(
  Format('Zakodowany znak: %s to %d', [Key, 255 - Ord(Key)]));
end;

Istnieje jeszcze jedna metoda ( najbardziej czasoch│onna ) polegaj▒ca na oprogramowaniu ka┐dego znaku. Znaczy to, ┐e my opisujemy jakim znakiem ma program zast▒piµ okre╢lony znak tekstu. 
Oto artuku│ o tym. [ Zobacz ]

 

Do ╢ci▒gniΩcia: 

Szyfrator.zip ( 2 kB )

 Linki:

Szyfrowania danych
PotΩ┐ny poradnik dotycz▒cy szyfrowania danych

 

Adam Boduch