Как написать генератор паролей
|
Призвали как-то одного волосатого админа в армию служить, на границу. Поставили его в дозор. Вдруг админ слышит шаги...
- Стой! Пароль!...
ответ из темноты:
- Владивосток...
- Логин ...
- ????!!!......
|
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.
|
Ну всё, Удачи...
|