скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

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



Автор: 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.

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






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook