Я написал тут генератор паролей. Кто подскажет как ускорить перебор?
Код:
var
fmGener: TfmGener;
DefStr,NewStr,NewStr2,NewStr3,NewStr4:String;
LenDs:integer;
implementation
{$R *.dfm}
procedure TfmGener.btnGenerateClick(Sender: TObject);
var i,i2,i3,i4:LongInt;
begin
if (cbCiper.Checked = true)and(cbPropLatAlf.Checked = false)and
(cbStrLatAlf.Checked = false)and(cbSumbol.Checked = false)
then DefStr := '0123456789';
if (cbPropLatAlf.Checked = true)and
(cbStrLatAlf.Checked = false)and(cbSumbol.Checked = false)and
(cbCiper.Checked = false) then DefStr := 'abcdefghijklmnopqrstuvwxyz';
if (cbPropLatAlf.Checked = false)and
(cbStrLatAlf.Checked = true)and(cbSumbol.Checked = false)and
(cbCiper.Checked = false) then DefStr := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
if (cbPropLatAlf.Checked = false)and
(cbStrLatAlf.Checked = false)and(cbSumbol.Checked = true)and
(cbCiper.Checked = false) then DefStr := ' ~`!@#$%^&*()_+|\=-{}[]:;"?/><.,¹';
if (cbPropLatAlf.Checked = true)and
(cbStrLatAlf.Checked = false)and(cbSumbol.Checked = false)and
(cbCiper.Checked = true) then DefStr := '0123456789abcdefghijklmnopqrstuvwxyz';
if (cbPropLatAlf.Checked = false)and
(cbStrLatAlf.Checked = true)and(cbSumbol.Checked = false)and
(cbCiper.Checked = true) then DefStr := '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
if (cbPropLatAlf.Checked = false)and
(cbStrLatAlf.Checked = false)and(cbSumbol.Checked = true)and
(cbCiper.Checked = true) then DefStr := '0123456789 ~`!@#$%^&*()_+|\=-{}[]:;"?/><.,¹';
if (cbPropLatAlf.Checked = true)and
(cbStrLatAlf.Checked = false)and(cbSumbol.Checked = true)and
(cbCiper.Checked = false) then DefStr := 'abcdefghijklmnopqrstuvwxyz ~`!@#$%^&*()_+|\=-{}[]:;"?/><.,¹';
if (cbPropLatAlf.Checked = false)and
(cbStrLatAlf.Checked = true)and(cbSumbol.Checked = true)and
(cbCiper.Checked = false) then DefStr := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ ~`!@#$%^&*()_+|\=-{}[]:;"?/><.,¹';
if (cbPropLatAlf.Checked = true)and
(cbStrLatAlf.Checked = true)and(cbSumbol.Checked = false)and
(cbCiper.Checked = false) then DefStr := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
if (cbPropLatAlf.Checked = true)and
(cbStrLatAlf.Checked = true)and(cbSumbol.Checked = false)and
(cbCiper.Checked = true) then DefStr := '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
if (cbPropLatAlf.Checked = true)and
(cbStrLatAlf.Checked = false)and(cbSumbol.Checked = true)and
(cbCiper.Checked = true) then DefStr := '0123456789abcdefghijklmnopqrstuvwxyz ~`!@#$%^&*()_+|\=-{}[]:;"?/><.,¹';
if (cbPropLatAlf.Checked = false)and
(cbStrLatAlf.Checked = true)and(cbSumbol.Checked = true)and
(cbCiper.Checked = true) then DefStr := '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ ~`!@#$%^&*()_+|\=-{}[]:;"?/><.,¹';
if (cbPropLatAlf.Checked = true)and
(cbStrLatAlf.Checked = true)and(cbSumbol.Checked = true)and
(cbCiper.Checked = true) then DefStr := '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ~`!@#$%^&*()_+|\=-{}[]:;"?/><.,¹';
LenDs := Length(DefStr);
if UpDown1.Position = 1 then begin
for i := 1 to LenDs do begin
application.ProcessMessages;
NewStr := Copy(DefStr,i,1);
mPass.Lines.Add(NewStr);
end;
end;
if UpDown1.Position = 2 then begin
for i2 := 1 to LenDs do begin
application.ProcessMessages;
NewStr2 := Copy(DefStr,i2,1);
for i := 1 to LenDs do begin
application.ProcessMessages;
NewStr := Copy(DefStr,i,1);
mPass.Lines.Add(NewStr2 + NewStr);
end;
end;
end;
if UpDown1.Position = 3 then begin
for i3 := 1 to LenDs do begin
application.ProcessMessages;
NewStr3 := Copy(DefStr,i3,1);
for i2 := 1 to LenDs do begin
application.ProcessMessages;
NewStr2 := Copy(DefStr,i2,1);
for i := 1 to LenDs do begin
application.ProcessMessages;
NewStr := Copy(DefStr,i,1);
mPass.Lines.Add(NewStr3 + NewStr2 + NewStr);
end;
end;
end;
end;
if UpDown1.Position = 4 then begin
for i4 := 1 to LenDs do begin
application.ProcessMessages;
NewStr4 := Copy(DefStr,i4,1);
for i3 := 1 to LenDs do begin
application.ProcessMessages;
NewStr3 := Copy(DefStr,i3,1);
for i2 := 1 to LenDs do begin
application.ProcessMessages;
NewStr2 := Copy(DefStr,i2,1);
for i := 1 to LenDs do begin
application.ProcessMessages;
NewStr := Copy(DefStr,i,1);
mPass.Lines.Add(NewStr4 + NewStr3 + NewStr2 + NewStr);
end;
end;
end;
end;
end;
end;
procedure TfmGener.Create(Sender: TObject);
begin
UpDown1.Associate := Edit1;
end;
end.