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;