Salut
Clé en main une fonction codage et décodage :
CONST
KZ1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 0123456789';
KZ2 = 'DhijklEFbcGH67IJKNO345PTUV28WXYZadLMefgmnQRSopqrsABCtuvwxyz 019';
KZ3 = '123456789012345678901234567890123456789012345678901234567890123';
Kmax = 63;
Function Codage(CH1:string; CLE:string):string;
var CH2:string; // chaine codée transmise par result
i,Lch1,Nch1,Ncle,Xcle,Lcle,Ncod,Lcar,decal : integer;
begin
Lch1 := length(CH1); // longueur de la chaine à coder
Lcle := length(CLE); // longueur de la clé
CH2 := dupestring('*',Lch1); // initialisation de la chaine codée
Xcle := 0; // initialisation du balayage clé
for i:=1 to Lch1 do begin
Nch1 := pos(CH1[i],KZ1); // position du carac à coder dans la chaine KZ1
if Nch1=0 then
begin
CH2[i] := CH1[i];
continue;
end;
if Lch1=0 then
begin
CH2[i] := CH1[i];
continue;
end;
Inc(Xcle); if Xcle>Lcle then Xcle := 1;
Ncle := pos(CLE[Xcle],KZ1); // position du carac courant de la clé dans la chaine KZ1
Decal := StrToInt(KZ3[Ncle]); // décalage du à la clé à apporter pour coder le carac
Ncod := Nch1 + Decal;
if Ncod>Kmax then Ncod := Ncod - Kmax;
CH2[i] := KZ2[Ncod];
end;
result := CH2;
end;
Function DeCodage(CH2:string; CLE:string):string;
var CH1:string; // chaine codée transmise par result
i,Lch2,Nch2,Ncle,Xcle,Lcle,Ncod,Lcar,decal : integer;
begin
Lch2 := length(CH2); // longueur de la chaine à coder
Lcle := length(CLE); // longueur de la clé
CH1 := dupestring('*',Lch2); // initialisation de la chaine codée
Xcle := 0; // initialisation du balayage clé
for i:=1 to Lch2 do begin
Nch2 := pos(CH2[i],KZ2); // position du carac à coder dans la chaine KZ2
if Nch2=0 then
begin
CH1[i] := CH2[i];
continue;
end;
Inc(Xcle); if Xcle>Lcle then Xcle := 1;
Ncle := pos(CLE[Xcle],KZ1); // position du carac courant de la clé dans la chaine KZ1
Decal := StrToInt(KZ3[Ncle]); // décalage du à la clé à apporter pour coder le carac
Ncod := Nch2 - Decal;
if Ncod<1then Ncod := Ncod + Kmax;
CH1[i] := KZ1[Ncod];
end;
result := CH1;
end;
Dans cette version ,la clé ne doit comporter que des lettres (A-Z,a-z) des chiffres (0-9) et l'espace
(pas de lettres accentuées)
La chîne à coder peut être quelconque
10 déc. 2017 à 11:08
cordialement