[Delphi] Optymalizacja szyfru Vigenere'a

0

Witam.

Czy mógłby mi ktoś pomóc w zoptymalizowaniu poniższej procedury?

procedure TVicStream.vcryptpass(haslo:string);
var
wyj : TMemoryStream;
i: longint;
zwej,zpass,zwyj : char;
len:integer;
begin
wyj  := TMemoryStream.Create;
Position := 0;
len := length(haslo);
  try
      for i := 0 to Size-1 do
      begin
        Position := i;
        read(zwej,1);
        zpass := haslo[(i mod len)+1];
        zwyj := char((ord(zwej) + ord(zpass) - 1) mod 256);
        wyj.Write(zwyj,1);
      end;
    finally
      LoadFromStream(wyj);
      wyj.Free;
    end;
end; 

Program,nad którym właśnie pracuję wykonuje dość dużo operacji na sporych ilościach danych więc zależy mi na maksymalnej optymalizacji kodu, a na tą procedurę jakoś mi brakuje pomysłu...

0

jeśli Size jest znane np. przy ustalaniu hasła (czyli jest stałe dla danego hasła) to

zpass := haslo[(i mod len)+1];
       ... ord(zpass) ...

możesz zapisać we wcześniej przygotowanej tablicy

zpass: array[0..len] of Byte;
zpass[0] := Ord(haslo[1]) - 1;
zpass[1] := Ord(haslo[2]) - 1;

itd..

a potem w procedurze zamiast

zpass := haslo[(i mod len)+1];
zwyj := char((ord(zwej) + ord(zpass) - 1) mod 256);
zwyj := char((ord(zwej) + zpass[i]) mod 256);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.