1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
| Program succes ;
type msg = string ; vect = array [1..256] of integer ;
var Mm,M:msg ; y, a,b,c,d,a1,b1,c1,d1,i,N,ch:integer ; bl:boolean;
procedure Bvenue;
begin writeln ('Choisissez une option:'); writeln;
writeln (' 1_ Chiffrer un message.');
writeln (' 2_ Dchiffrer un message.');
writeln (' 3_ Quitter le programme.');
End;
function cls (var n:integer ):char;
BEGIN case n of 1 :cls:='a'; 2 :cls:='b'; 3 :cls:='c'; 4 :cls:='d'; 5 :cls:='e';
6 :cls:='f'; 7 :cls:='g'; 8 :cls:='h'; 9 :cls:='i'; 10:cls:='j';
11:cls:='k'; 12:cls:='l'; 13:cls:='m'; 14:cls:='n'; 15:cls:='o';
16:cls:='p'; 17:cls:='q'; 18:cls:='r'; 19:cls:='s'; 20:cls:='t';
21:cls:='u'; 22:cls:='v'; 23:cls:='w'; 24:cls:='x'; 25:cls:='y'; 26:cls:='z';
Else cls:='*';
end ;end;
function val (s: char):integer ;
BEGIN case s of 'a': val:=1; 'b': val:=2 ; 'c': val:=3 ; 'd': val:=4 ; 'e': val:=5 ;
'f': val:=6; 'g': val:=7 ; 'h': val:=8 ; 'i': val:=9 ; 'j': val:=10;
'k': val:=11; 'l': val:=12; 'm': val:=13; 'n': val:=14; 'o': val:=15;
'p': val:=16; 'q': val:=17; 'r': val:=18; 's': val:=19; 't': val:=20;
'u': val:=21; 'v': val:=22; 'w': val:=23; 'x': val:=24; 'y': val:=25; 'z': val:=26;
Else val:=0 ;
end; end;
function verif (a,b,c,d:integer):boolean;
var ii,h,det:integer;
begin
det:=a*d-b*c; ii:=1; h:=0;
while ((i<26)and(h<>1)) do
begin
h:= (det*ii)mod 26;
if (h<>1) then ii:=ii+2 ;
end;
if(h=1)then verif:= true
else verif := false;
end;
Procedure Chiffrer ( a,b,c,d :integer;Mm:msg ;Var M:msg);
var lg,i:integer; Tn:vect;
begin lg:=length (Mm);
if (lg mod 2 <>0) then begin Mm[lg+1]:='o'; lg:=lg+1; end;
for i :=1 to N do Tn[i]:=val(M[i]);
i:=1; while (i<lg) do
begin Tn[i] := (a* val(Mm[i])+b*val(Mm[i+1])) Mod 26;
Tn[i+1] := (c* val(Mm[i])+d*val(mm[i+1])) Mod 26;
i:=i+2;
end;
for i := 1 to lg do writeln(tn[i]);
for i := 1 to lg do m[i]:=cls(tn[i]);
for i := 1 to lg do writeln(m[i]);
end;
Procedure Dechiffrer (a,b,c,d:integer;M:msg;Var Mm:msg);
var h,ii,det,i,N,lg:integer; T:vect;
begin
N:=length(M);
for i :=1 to N do T[i]:=val(M[i]);
If (N mod 2 <>0) then begin T[N+1]:=0 ; N:=N+1 ; end;
det:=a*d-b*c; ii:=1;h:=0; while ((ii<26)and(h<>1)) do
begin h:= (det*i)mod 26;
if (h<>1) then i:=i+2;
end;
a1 := d*ii mod 26 ;
b1 := b*ii mod 26 ;
c1 := c*ii mod 26 ;
d1 := a*ii mod 26 ;
for i := 1 to N do
begin
T[i]:=(a1*T[i]+b1*T[1+i]) mod 26;Mm[i]:= cls(T[i]);
T[i+1]:=(c1*T[i]+d1*T[1+i]) mod 26;Mm[i+1]:= cls(T[i+1]);
i:=i+1;
end;
lg:=length(M);
If (lg mod 2 <>0) then Mm[N]:=' ';
end;
Begin
repeat begin
writeln('=====================================================================');writeln;
Writeln ; Writeln ('**** Programme de cryptage pour dbutants **** '); writeln ;
Writeln('=====================================================================');writeln;
Bvenue; Writeln ; readln (ch);
case ch of
1 : begin writeln; Writeln ('Attention !'); writeln;
Writeln ('Votre msg ne dois pas dépasser 256 caracteres');
writeln ('Donnez votre message: '); writeln;
readln (Mm);writeln('Donnez la cl de chiffrement: a,b,c et d');
repeat writeln;
readln(a); readln(b);readln(c); readln(d); bl:=verif(a,b,c,d);
if(bl=false) then writeln ('Votre clé est incompatible,veuillez ressaisir une autre clé.');
until(bl=true);
chiffrer(a,b,c,d,Mm,M);
end;
2 : begin writeln; writeln ('Attention !'); writeln;
writeln ('Donnez votre message à déchiffrer.'); readln (M);
writeln; writeln ('Donnez la clé de chiffrement: a,b,c et d');
repeat writeln;
readln(a); readln(b);readln(c); readln(d);
if (verif(a,b,c,d)=false) then writeln;
writeln ('Votre clé est incompatible,veuillez ressaisir une autre clé.');
until(verif(a,b,c,d)=true);
Dechiffrer(a,b,c,d,M,Mm);
writeln;
writeln ('=================================================================================');
writeln;
end;
3 : writeln('A bientot, merci.')
Else writeln('Erreur: votre saisie est invalide !');
End;
If (ch=1) Then begin write ('Votre msg déchiffré : ',Mm); writeln;
write ('Votre msg chiffré : ');
for i := 1 to (length(mm)) do write(m[i]);
writeln;
End ;
If (ch=2) Then begin writeln ('Votre msg déchiffré : ',Mm); writeln;
writeln ('Votre msg chiffré : ');
for i := 1 to (length(mm)) do write(m[i]);
writeln;
End ;
End;
until( ch=3) ;
Readln;
end. |
Partager