home *** CD-ROM | disk | FTP | other *** search
/ PC Interdit / pc-interdit.iso / motpasse / mtpass1.pas < prev    next >
Pascal/Delphi Source File  |  1994-10-18  |  4KB  |  177 lines

  1. program motdepasse_type1;
  2.  
  3. uses crt,design;
  4.  
  5. VAR motdepasse : string;
  6.     motdepassecheck : boolean;
  7.  
  8. procedure secret_readln(var s : string);
  9. var c : char;
  10.    li : integer;
  11. begin;
  12.   repeat
  13.     c := readkey;
  14.     if c <> #8 then begin;
  15.       s := s + c;
  16.       gotoxy(28,12);
  17.       for li := 1 to length(s) do write('*');
  18.     end else begin;
  19.       s := copy(s,1,length(s)-1);
  20.       gotoxy(28,12);
  21.       for li := 1 to length(s) do write('*');
  22.       write(' ');
  23.       gotoxy(wherex-1,wherey);
  24.     end;
  25.   until c = #13;
  26. end;
  27.  
  28. procedure motdepasse_modifier;
  29. begin;
  30.   save_screen;
  31.   fenetre(10,8,60,7,' Changement de mot de passe ',black,7);
  32.   writexy(13,10,'Veuillez taper SVP votre nouveau mot de passe ');
  33.   writexy(13,12,'Mot de passe : ');
  34.   motdepasse := '';
  35.   secret_readln(motdepasse);
  36.   restore_screen;
  37.   textcolor(7);
  38.   textbackground(black);
  39. end;
  40.  
  41. Function Gen_Checksum(mdp : string) : word;
  42. VAR somme : word;
  43.     li : integer;
  44. begin;
  45.   somme := 0;
  46.   for li := 1 to ord(mdp[0]) do begin;
  47.     somme := somme + ord(mdp[li]);
  48.   end;
  49.   Gen_Checksum := somme;
  50. end;
  51.  
  52. Function encode(mdp : string;add : char) : string;
  53. var li : integer;
  54. begin;
  55.   for li := 1 to 255 do begin;
  56.     mdp[li] := char(255 xor (ord(mdp[li]) + ord(add)));
  57.   end;
  58.   encode := Mdp;
  59. end;
  60.  
  61. procedure motdepasse_enregistrer;
  62. var fmp : file;
  63.     key : char;
  64.     check : word;
  65. begin;
  66.   Check := gen_Checksum(motdepasse);
  67.   motdepasse := encode(motdepasse,Key);
  68.   assign(fmp,'motdepasse.dat');
  69.   rewrite(fmp,1);
  70.   blockwrite(fmp,key,1);
  71.   blockwrite(fmp,motdepasse,256);
  72.   blockwrite(fmp,check,2);
  73.   close(fmp);
  74. end;
  75.  
  76. procedure motdepasse_saisir;
  77. begin;
  78.   save_screen;
  79.   fenetre(10,8,60,7,' Contrôle du mot de passe ',black,7);
  80.   writexy(13,10,'Veuillez taper votre mot de passe ');
  81.   writexy(13,12,'mot de passe : ');
  82.   motdepasse := '';
  83.   secret_readln(motdepasse);
  84.   restore_screen;
  85.   textcolor(7);
  86.   textbackground(black);
  87. end;
  88.  
  89. Function decode(mdp : string;add : char) : string;
  90. var li : integer;
  91. begin;
  92.   for li := 1 to 255 do begin;
  93.     mdp[li] := char((255 xor ord(mdp[li])) - ord(add));
  94.   end;
  95.   decode := Mdp;
  96. end;
  97.  
  98. Function Checksum_Ok(mdp : string; Key: char; somme : word) : boolean;
  99. Var tsomme : word;
  100.     li : integer;
  101.     h : char;
  102. begin;
  103.   tsomme := 0;
  104.   for li := 1 to ord(mdp[0]) do begin;
  105.     tsomme := tsomme + ord(mdp[li]);
  106.   end;
  107.   if somme = tsomme then
  108.     Checksum_Ok := true
  109.   else
  110.     Checksum_Ok := false;
  111. end;
  112.  
  113. procedure motdepasse_controler;
  114. var fmp : file;
  115.     key : char;
  116.     check : word;
  117.     mottemoin : string;
  118. begin;
  119.   assign(fmp,'motdepasse.dat');
  120.   reset(fmp,1);
  121.   blockread(fmp,key,1);
  122.   blockread(fmp,mottemoin,256);
  123.   blockread(fmp,check,2);
  124.   close(fmp);
  125.   mottemoin := decode(mottemoin,Key);
  126.   if Checksum_Ok(mottemoin,Key,check) and (mottemoin = motdepasse) then
  127.     motdepassecheck := true
  128.   else
  129.     motdepassecheck := false;
  130. end;
  131.  
  132. procedure motdepasse_reagir;
  133. begin;
  134.   save_screen;
  135.   fenetre(10,8,50,7,'',black,7);
  136.   If motdepassecheck then begin;
  137.     writexy(13,11,'mot de passe correct - Accès autorisé ');
  138.   end else begin;
  139.     writexy(13,11,'Mot de passe ERRONE ! - Accès interdit !');
  140.   end;
  141.   repeat until keypressed; readkey;
  142.   restore_screen;
  143.   textcolor(7);
  144.   textbackground(black);
  145. end;
  146.  
  147. procedure menu;
  148. var choix : byte;
  149. begin;
  150.   repeat
  151.     clrscr;
  152.     writexy(10,1,'Exemple de programme pour mot de passe de type 1');
  153.     writexy(18,3,'(c) ''94 par MICRO APPLICATION ');
  154.     writexy(28,6,'M E N U');
  155.     writexy(28,7,'~~~~~~~');
  156.     writexy(15,8,'1  Modifier le mot de passe ');
  157.     writexy(15,9,'2  Contrôler le mot de passe');
  158.     writexy(15,10,'3  Fin');
  159.     writexy(15,13,'Votre choix : ');
  160.     readln(choix);
  161.     if choix = 1 then begin;
  162.       motdepasse_modifier;
  163.       motdepasse_enregistrer;
  164.     end;
  165.     if choix = 2 then begin;
  166.       motdepasse_saisir;
  167.       motdepasse_controler;
  168.       motdepasse_reagir;
  169.     end;
  170.   until choix = 3;
  171. end;
  172.  
  173.  
  174. begin;
  175.   menu;
  176. end.
  177.