53. XOR- sifravimo metodas
 
Vienas is paprasciausiu sifravimu yra XOR metodas. Jis pagrystas logine funkcija XOR.
XOR reiksmiu lentele:

argumentai reiksme  1    1     0
  1    0     1
  0    1     1
  0    0     0
 

Sifravimas algoritmas toks:
1. Imamas tokio ilgio tekstas/duomenys [kuriuos norme uzsifruoti], koks yra slaptazodzio ilgis.
2. Kiekvienas, atitinkamas teksto/duomenu baitas ir slaptazodzio baitas pateikami kaip XOR argumentai.
3. Gautas baitas ir yra tas uzsifruotas baitas.
4. Imama sekantys slaptazodzio ilgio baitai ir (kol tekstas/duomenys nesibaige) vykdoma punktas nr. 2.

Issifravimas analogiskas sifravimui:
Imamas uzsifruotas tekstas/duomenys ir jie dar karta sifruojami pagal auksciau pateikta algoritma.
Gaunamas nesifruotas tekstas.

Sio metodo trukumai yra tie, jog jei sifrojamas normalus tekstas ir slaptazodis nelabai ilgas, tai gan lengvai galima pralausti si algoritma brute force`u.

Jei kas susizavejo siuo algoritmu, tai parasiau trumpa programele, kuri demonstruoja sifravima/desifravima duomenis.
 

uses crt;
var unsifred,           {nesifruota fraze}
    sifred,             {sifruota fraze}
    desifred,           {issifruota fraze}
    key: string;        {sifravimoraktas}
    i,                  {pagalbinis kintamasis}
    ki : byte;          {rakto ilgi nusakantis dydis}
begin

     ClrScr;  {valom ekrana}

     WriteLn ( 'Ivesk fraze kuria sifruosi:' );
     ReadLn ( unsifred ); {Ivedam sifruojama fraze}

     WriteLn ( 'Ivesk rakta pagal kuri sifruosi:' );
     ReadLn ( key );      {Ivedam sifravimo rakta}

     ki := Length ( key ); {Randam rakto ilgi}
     sifred := unsifred;   {Padarom eilutes, kuriu ilgiai}
     desifred := unsifred; {butu lygus frazes ilgiui}

     for i := 1 to Length ( unsifred ) do  {Sifruojame}
         sifred [ i ] := Chr ( ord ( unsifred [ i ] ) xor
                Ord ( key [ i mod ki ] ) );

     WriteLn (sifred);   {Sausdiname uzsifruota fraze}

     for i := 1 to Length ( unsifred ) do {Desifruojame/atsifruojame}
         desifred [ i ] := Chr ( ord ( sifred [ i ] ) xor
                Ord ( key [ i mod ki ] ) );

     WriteLn (desifred); {Sausdiname atsifruota fraze}

     ReadLn;              {Laukiame [ENTER] paspaudimo}

® 2002-2003 VaidaZ <> Patariu ikelti i Turbo Pascal programa. [Vaidas]