Delphi World - Как написать генератор паролей
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Как написать генератор паролей

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

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

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования