Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Как написать генератор паролей

Автор: Barracuda

Призвали как-то одного волосатого админа в армию служить, на границу. Поставили его в дозор. Вдруг админ слышит шаги...
- Стой! Пароль!...
ответ из темноты:
- Владивосток...
- Логин ...
- ????!!!......

Hi всем! Начнём с того что кинем на форму три Edit -а , Батон (Button), два GroopBox-a , popUp меню и UpDown. На одну панель бросаем три RadioButton-a, на другую три CheckBox-a. Ассоциируем UpDown с первым Edit-ом, здесь будет выбор кол-ва букв в пароле. Второй Edit будет для вывода пароля, а третий для побуквенного вывода сгенереного пароля. CheckBox-ы называем C1,C2,C3,C4,C5. RadioButton-ы называем Ra1,Ra2,Ra3. В меню делаем два пункта, их каптионы называем +10 и -10. Caption-ы CheckBox-ов обзываем 'Латиница','Кирилица','0..9','Спецсимволы ' и 'Смесь'. Это для выбора символов из которых генерится пароль. Caption-ы RadioButton-ов обзываем 'Upper Case' 'Lower Case' 'Misc' -для выбора регистра. Один CheckBox и RadioButton делаем выделеными по умолчанию. Батон используем как стартовую кнопку. А дальше смотрите код:


 unit Unit1;
 
 interface
 
 uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, Spin, ExtCtrls, Menus, ComCtrls, Buttons;
 
 type
   TForm1 = class(TForm)
     Gen: TButton;
     Label1: TLabel;
     Status: TStatusBar;
     PopupMenu2: TPopupMenu;
     N101: TMenuItem;
     N102: TMenuItem;
     edit2: TEdit;
     edit3: TEdit;
     edit1: TMemo;
     U1: TUpDown;
     C1: TCheckBox;
     C2: TCheckBox;
     C3: TCheckBox;
     C4: TCheckBox;
     C5: TCheckBox;
     Ra1: TRadioButton;
     Ra2: TRadioButton;
     Ra3: TRadioButton;
     GroupBox1: TGroupBox;
     GroupBox2: TGroupBox;
     procedure GenClick(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure N101Click(Sender: TObject); {Обработка пунктов меню}
     procedure N102Click(Sender: TObject); {Обработка пунктов меню}
     procedure SpinKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
     procedure edit1KeyPress(Sender: TObject; var Key: Char);
   private
     { Private declarations }
   public
     { Public declarations }
 end;
 
 var
   Form1: TForm1;
   kol: integer;
   ss: string;
 
 implementation
 
 {$R *.DFM}
 
 procedure TForm1.GenClick(Sender: TObject);
 label
   1;
 const
   con1='qwertyuiopasdfghjklzxcvbnm';
   con2='QWERTYUIOPASDFGHJKLZXCVBNM';
   con3='qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM';
   con4='!@#$%^&*()_+|\=-<>.,/?''; :"][}{';
   con5='йцукенгшщзхъфывапролджэячсмитьбю';
   con6='ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ';
   con7='йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ';
 var
   s: string;
   r, m, k, l: integer;
 begin
   randomize;
   if edit1.text<>'' then
     kol:=strtoint(edit1.text)
   else
   begin
     goto 1;
   end;
   begin
     edit2.text:='Введите значение...';
   end;
   edit3.clear; status.simpletext:='Подождите, пароль генерируется...';
   repeat
     r:=random(8)+1;
     if kol>0 then
       if (c1.Checked=true) or (c2.Checked=true) or
       (c3.Checked=true) or (c4.Checked=true) then
         case r of
           1:if (c2.Checked=true) and (ra1.Checked=true) then
               s:=s+con1[random(25)+1];
           2:if (c2.Checked=true) and (ra2.Checked=true) then
               s:=s+con2[random(25)+1];
           3:if (c2.Checked=true) and (ra3.Checked=true) then
               s:=s+con3[random(49)+1];
 
           4:if c4.Checked=true then
               s:=s+con4[random(30)+1];
           5:if c1.Checked=true then
               s:=s+inttostr(random(10));
 
           6:if (c3.Checked=true) and (ra1.Checked=true) then
               s:=s+con5[random(31)+1];
           7:if (c3.Checked=true) and (ra2.Checked=true) then
               s:=s+con6[random(31)+1];
           8:if (c3.Checked=true) and (ra3.Checked=true) then
               s:=s+con7[random(63)+1];
         end
     else
     begin
       s:='Выберите символы которые вы хотите использовать';
       kol:=length(s);
     end;
   until
     length(s)>=kol;
   while length(s)>kol do
     delete(s,1,1);
 
   1:
   if edit1.text='' then
   begin
     s:='Выберите кол-во символов в пароле!';
     kol:=length(s);
     status.simpletext:='Выберите кол-во символов в пароле!';
     edit2.text:=s;
     edit3.text:= 'Выберите кол-во символов в пароле!';
   end
   else
   begin
     edit2.text:=s;
     for m:=1 to kol do
       edit3.text:=edit3.text+' '+s[m];
   status.simpletext:='Пароль готов!';
   end;
 end;
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
   edit2.clear;edit3.clear;
   edit2.text:='Здесь будет пароль!';
   u1.position:=8;
   edit3.text:='А здесь каждый символ отдельно!'; kol:=0;
 end;
 
 procedure TForm1.N101Click(Sender: TObject);
 begin
   u1.position:=u1.position+10
 end;
 
 procedure TForm1.N102Click(Sender: TObject);
 begin
   if u1.position>10 then
     u1.position:=u1.position-10
   else
     status.simpletext:='Слишком маленькое значение!!!';
 end;
 
 procedure TForm1.SpinKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
 begin
   if (key=13) then genclick(gen) ;
 end;
 
 procedure TForm1.edit1KeyPress(Sender: TObject; var Key: Char);
 begin
   if not (key in ['0'..'9']) then key:=#0;
 end;
 
 end.
 

Ну всё, Удачи...




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS