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;