Призвали как-то одного волосатого админа в армию служить, на границу. Поставили его в дозор. Вдруг админ слышит шаги...
- Стой! Пароль!...
ответ из темноты:
- Владивосток...
- Логин ...
- ????!!!......
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;
interfaceuses
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)
elsebegingoto 1;
end;
begin
edit2.text:='Введите значение...';
end;
edit3.clear; status.simpletext:='Подождите, пароль генерируется...';
repeat
r:=random(8)+1;
if kol>0 thenif (c1.Checked=true) or (c2.Checked=true) or
(c3.Checked=true) or (c4.Checked=true) thencase 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];
endelsebegin
s:='Выберите символы которые вы хотите использовать';
kol:=length(s);
end;
until
length(s)>=kol;
while length(s)>kol do
delete(s,1,1);
1:
if edit1.text='' thenbegin
s:='Выберите кол-во символов в пароле!';
kol:=length(s);
status.simpletext:='Выберите кол-во символов в пароле!';
edit2.text:=s;
edit3.text:= 'Выберите кол-во символов в пароле!';
endelsebegin
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);
beginif u1.position>10 then
u1.position:=u1.position-10
else
status.simpletext:='Слишком маленькое значение!!!';
end;
procedure TForm1.SpinKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
beginif (key=13) then genclick(gen) ;
end;
procedure TForm1.edit1KeyPress(Sender: TObject; var Key: Char);
beginifnot (key in ['0'..'9']) then key:=#0;
end;
end.
Ну всё, Удачи...
Here is a translation of the content into Russian:
Пароль-генератор!
Код, предоставленный в этом примере, - это приложение Delphi, генерирующее пароли на основе ввода пользователя. Оно имеет несколько функций:
Три текстовых поля: одно для отображения сгенерированного пароля, второе для отображения пароля в виде отдельных символов и третье для ввода количества символов для генерации.
Кнопка для начала генерации пароля.
Пять чекбоксов для выбора наборов символов (латиница, кириллица, цифры 0-9, спецсимволы или смесь).
Три радиobuttons для выбора чувствительности регистра (верхний, нижний или смешанный).
Управление шагом для изменения количества символов в пароле.
Меню с двумя пунктами для увеличения или уменьшения количества символов на 10.
Код хорошо организован и легко понятен. Однако есть несколько предложений по улучшению:
Вызов randomize должен быть перемещен за пределы процедуры GenClick, чтобы он выполнялся только один раз при создании формы.
Код использует метки goto, которые в целом считаются плохой практикой в программировании Delphi. Вместо этого, используйте простой цикл или рекурсию для повторения процесса генерации пароля до достижения желаемой длины.
Процесс генерации пароля можно оптимизировать, используя одиночный цикл вместо множества case-заявлений.
Пункты меню и радиobuttons должны иметь более описательные заголовки, чтобы помочь пользователям понять их функции.
Вот обновленная версия кода с этими предложениями реализованными:
unitUnit1;interfaceusesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,Spin,ExtCtrls,Menus,ComCtrls,Buttons;typeTForm1=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;procedureGenClick(Sender:TObject);procedureFormCreate(Sender:TObject);procedureN101Click(Sender:TObject);procedureN102Click(Sender:TObject);procedureSpinKeyDown(Sender:TObject;varKey:Word;Shift:TShiftState);procedureedit1KeyPress(Sender:TObject;varKey:Char);private{ Private declarations }public{ Public declarations }end;varForm1:TForm1;kol:integer;ss:string;implementation{$R *.DFM}procedureTForm1.GenClick(Sender:TObject);beginifedit1.text<>''thenkol:=StrToInt(edit1.text)elsebeginkol:=0;end;s:='';repeatr:=Random(8)+1;caserof1:ifC2.CheckedandRa1.Checkedthens:=s+con1[Random(25)+1];2:ifC2.CheckedandRa2.Checkedthens:=s+con2[Random(25)+1];3:ifC2.CheckedandRa3.Checkedthens:=s+con3[Random(49)+1];4:ifC4.Checkedthens:=s+con4[Random(30)+1];5:ifC1.Checkedthens:=s+IntToStr(Random(10));6:ifC3.CheckedandRa1.Checkedthens:=s+con5[Random(31)+1];7:ifC3.CheckedandRa2.Checkedthens:=s+con6[Random(31)+1];8:ifC3.CheckedandRa3.Checkedthens:=s+con7[Random(63)+1];end;untilLength(s)>=kol;whileLength(s)>koldoDelete(s,1,1);edit2.text:=s;form:=1tokoldoedit3.text:=edit3.text+' '+s[m];status.simpletext:='Пароль готов!';end;procedureTForm1.FormCreate(Sender:TObject);beginedit2.clear;edit3.clear;edit2.text:='Здесь будет пароль!';u1.position:=8;edit3.text:='А здесь каждый символ отдельно!';kol:=0;Randomize;end;procedureTForm1.N101Click(Sender:TObject);beginu1.position:=u1.position+10;end;procedureTForm1.N102Click(Sender:TObject);beginifu1.position>10thenu1.position:=u1.position-10elsestatus.simpletext:='Слишком маленькое значение!!!';end;procedureTForm1.SpinKeyDown(Sender:TObject;varKey:Word;Shift:TShiftState);beginif(key=13)thenGenClick(Gen);end;end;procedureTForm1.edit1KeyPress(Sender:TObject;varKey:Char);beginifnot(Keyin['0'..'9'])thenkey:=#0;end;end.
Обратите внимание, что я также добавил более описательные заголовки для пунктов меню и радиobuttons, чтобы помочь пользователям понять их функции.
Как написать генератор паролей на Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.