Program szyfruj;

aaauses Crt, Strings;

var

aafin: file;

aafout: file;

aap: PChar;

aazs: longint;

aazr: longint;

aalp: word;

aalz: word;

function kodujznak(c: char; klucz: byte): char;

aavar

aai: word;

aaj: byte;

begin

aaj:=ord(c);

aai:=j+klucz;

aaif(j+klucz)>255 then

aaaaaaadec(i,255); {zmniejsza o 255}

aakodujznak:=chr(i);

end;

function dekodujznak(c: char; klucz: byte): char;

avar

aai: word;

aaj: byte;

abegin

aaj:=ord(c);

aai:=j-klucz;

aaif(j-klucz)<0 then

aaaaaaainc(i,255); {zwieksza o 255}

aadekodujznak:=chr(i);

end;

procedure szyf(Co :Pchar; haslo: string);

avar

aai:longint;

aab:byte;

abegin

aab:=1;

aafor i:=0 to strlen(co)-1 do

aabegin

aaaaaaaco[i]:=kodujznak(co[i], ord(haslo[b]));

aaaaaaainc(b); if b>length(haslo) then b:=1;

aaend;

end;

procedure deszyf(Co :Pchar; haslo: string);

avar

aai:longint;

aab:byte;

abegin

aab:=1;

aafor i:=0 to strlen(co)-1 do

aaabegin

aaaaaaaco[i]:=dekodujznak(co[i], ord(haslo[b]));

aaaaaaainc(b); if b>length(haslo) then b:=1;

aaend;

aend;

{************ Poczatek glownego programu *****************}

begin

aaclrscr;

aaassign(fin, paramstr(1));

aaassign(fout, paramstr(2));

aareset(fin,1);

aarewrite(fout,1);

aazs:=filesize(fin);

aawhile zs>0 do

aaabegin

aaaaaaaazr:=maxavail-1024*3;

aaaaaaaaif zr>65535 then zr:=65534;

aaaaaaaaif zr>zs then

aaaaaaaaaaaaabegin

aaaaaaaaaaaaaaaaaaazr:=zs;

aaaaaaaaaaaaaaaaaaazs:=0;

aaaaaaaaaaaaaaend

aaaaaaaaelse

aaaaaaaaaaaaazs:=zs-zr;

aaaaaaaagetmem(p,zr);

a aaaaaarepeat

aaaaaaaaaaaablockread(fin, P^, zr, lz);

aaaaaaaaaaaaszyf(p,paramstr(3));

{dla programu deszyfrujacego powyzsza linijke nalezy zamienic na: deszyf(p, paramstr(3));}

aaaaaaaaaaaablockwrite(fout,p^,lz,lp);

aaaaaaaauntil (lz=0) or (lp<>lz);

aaaaaaaaif assigned(p) then

aaaaaaaaaaaaaaaafreemem(p,zr);

aaaaend;

aaclose(fin);

aaclose(fout);

end.

{**************** Koniec programu *************************}