All pastes #961131 Raw Edit

Stuff

public text v1 · immutable
#961131 ·published 2008-03-28 18:14 UTC
rendered paste body
unit vigenere;

interface

implementation

function Crypt(Texto, key: string; cryp: boolean): string;
var
  casse, I: integer;
  cTexto, cKey: char;
label fin_func;
begin
  cTexto:=Texto[1];
  cKey:=key[1];
  if (Pos(UpCase(cTexto), 'AZERTYUIOPQSDFGHJKLMWXCVBN') = 0) then
    begin
      Result:=Texto;
      goto fin_func;
    end;
  if (Ord(cTexto) > 95) then
    begin
      casse:=96;
    end
  else
    begin
      casse:=64;
    end;
  if (cryp = FALSE) then
    begin
      I:=(((Ord(UpCase(cTexto)) - Ord(UpCase(cKey))) + 26) mod 26) + 1;
    end
  else
    begin
      I:=(((Ord(UpCase(cTexto)) + Ord(UpCase(cKey))) - 130) mod 26) + 1;
    end;
  Result:=Chr(I + casse);
  fin_func:
end;

function vigenere(Texto, key: string; Encode: boolean): string;
var
  sTemp: string;
  i: integer;
begin
  Result:= '';
  for i:=0 to (Length(Texto) - 1) do
    begin
      sTemp:=Crypt(Texto[i + 1], key[1 + (i mod Length(key))], Encode);
      Result:=concat(Result, sTemp);
    end;
end;