![]() |
|
|
|
|
#1
|
|||
|
|||
|
Привет всем участникам форума ! Помогите пожалуйста в решении такой задачи :
Перебор символов ( букв англ. языка ) в Delphi 7 . Например чтобы получалось так : a b c .. z ___ aa ab ac .. zz ___ и т.д. Размер пароля до 8 символов , и если можно пожалуйста с объяснением . Подобных тем смотрел очень много , не очень то понятно , надеюсь здесь мне помогут . Заранее спасибо ! |
|
#2
|
|||
|
|||
|
Ну, идея в том, что тебе надо просто перебирать последний символ. Если только буквы, то это довольно просто:
В общем, как то так: Код:
function GetNextValue(var AValue : String) : Boolean;
procedure IncValue(var AValue : String; AIndex : Integer);
var
Ch : Char;
begin
If (AIndex < 1) Or (AIndex > Length(AValue)) Then
Raise Exception.Create('Index out of bounds');
Ch := AValue[AIndex];
If Ch <> 'z' Then AValue[AIndex] := Chr(Ord(Ch) + 1) Else
Begin
AValue[AIndex] := 'a';
If AIndex = 1
Then AValue := 'a' + AValue
Else IncValue(AValue,AIndex-1);
End;
end;
begin
Result := True;
If AValue = '' Then AValue := 'a' Else
If AValue = 'zzzzzzzz' Then Result := False Else
IncValue(AValue,Length(AValue);
end;Код не проверял. Просто идея. |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
UchusNaDelhi7 (08.03.2012)
| ||
|
#3
|
|||
|
|||
|
Делаешь масив со всеми английскими буквами. Затем запускаешь два цикла один в другом и побуквенно перебираешь. Если тебе нужен пароль с 8 символов запускай 8 циклов. Это по моему самый просто вариант тупого перебора.
|
| Этот пользователь сказал Спасибо m1sclick за это полезное сообщение: | ||
UchusNaDelhi7 (08.03.2012)
| ||
|
#4
|
|||
|
|||
|
Почему взломщику пароля все помогают?
|
|
#5
|
|||
|
|||
|
Цитата:
Согласись , как организовать посимвольный перебор ( подбор пароля ) , в интернете уже давно есть , целое море , но я больше хочу узнать принцип перебора , нежели взломать кого -то . |
|
#6
|
|||
|
|||
|
Ну если говоришь что хочешь научиться то учись. А то я скину тебе код а толку для тебя ноль будет.
Создай массив с анлийским алфавитом, 8 переменных типа integer, дальше друг в друге напиши 8 циклов, а в конце добавь что-то типа Memo1.Lines.Add(alphabet[first]+alphabet[second]+alphabet[third]+...); И на выходе получишь все возможные комбинации. |
| Этот пользователь сказал Спасибо m1sclick за это полезное сообщение: | ||
UchusNaDelhi7 (10.03.2012)
| ||
|
#7
|
|||
|
|||
|
Цитата:
Для 9-значного " пароля " - Предполагая , что в пароле могут использоваться 36 различных символов (английские буквы одного регистра + цифры), а скорость перебора составляет 100 000 паролей в секунду ( скорость может быть намного меньше ) , то получим 1,015 599 5 x 100000000000000 вариантов , время перебора составит 32 года . Для 8-ми символов займет 11 месяцев . |
|
#8
|
|||
|
|||
|
PHP код:
![]() |
| Этот пользователь сказал Спасибо Pyro за это полезное сообщение: | ||
UchusNaDelhi7 (10.03.2012)
| ||
|
#9
|
|||
|
|||
|
Цитата:
С самого начала хотел с массивом , но не получилось , если можно объясните на примере ( особенно с циклами ) . |
|
#10
|
|||
|
|||
|
Цитата:
Спасибо большое еще раз , все гениальное - просто ! Сел с ручкой и листом А4 и писал программу , принцип очень простой как оказалось , написал для 9-значного " пароля " , отладил , все работает . А вот и код : Код:
procedure TForm1.Button1Click(Sender: TObject);
var
Abc : array [1..26] of char;
a,b,c,d,e,f,g,h,i: integer;
begin
Abc[1]:='a';
Abc[2]:='b';
Abc[3]:='c';
Abc[4]:='d';
Abc[5]:='e';
Abc[6]:='f';
Abc[7]:='g';
Abc[8]:='h';
Abc[9]:='i';
Abc[10]:='j';
Abc[11]:='k';
Abc[12]:='l';
Abc[13]:='m';
Abc[14]:='n';
Abc[15]:='o';
Abc[16]:='p';
Abc[17]:='q';
Abc[18]:='r';
Abc[19]:='s';
Abc[20]:='t';
Abc[21]:='u';
Abc[22]:='v';
Abc[23]:='w';
Abc[24]:='x';
Abc[25]:='y';
Abc[26]:='z';
a:=0;
While a<=25 do // 1 цикл
begin
a:=a+1;
b:=0;
While b<=25 do // 2 цикл
begin
b:=b+1;
c:=0;
While c<=25 do // 3 цикл
begin
c:=c+1;
d:=0;
While d<=25 do // 4 цикл
begin
d:=d+1;
e:=0;
While e<=25 do // 5 цикл
begin
e:=e+1;
f:=0;
While f<=25 do // 6 цикл
begin
f:=f+1;
g:=0;
While g<=25 do // 7 цикл
begin
g:=g+1;
h:=0;
While h<=25 do // 8 цикл
begin
h:=h+1;
i:=0;
While i<=25 do // 9 цикл
begin
i:=i+1;
Memo1.Lines.Add(Abc[a]+Abc[b]+Abc[c]+Abc[d]+Abc[e]+Abc[f]+Abc[g]+Abc[h]+Abc[i]);
end
end
end
end
end
end
end
end ;
end;
end;В Memo1 получается полный перебор букв Англ. алфавита ( правда по времени очень , очень долго , тем более для 9 знаков ) . Спасибо всем участникам форума за помощь ! |
|
#11
|
|||
|
|||
|
Ну блин, неужели ты не слишал о цикле for? Такой код не красивый(
|
| Этот пользователь сказал Спасибо m1sclick за это полезное сообщение: | ||
UchusNaDelhi7 (10.03.2012)
| ||
|
#12
|
||||
|
||||
|
Если тупо лоб в лоб, то
Код:
procedure TForm1.Button1Click(Sender: TObject);
var s1,s2,s3,s4,s5,s6,s7,s8: char;
begin
for s1:='a' to 'z' do
for s2:='a' to 'z' do
for s3:='a' to 'z' do
for s4:='a' to 'z' do
for s5:='a' to 'z' do
for s6:='a' to 'z' do
for s7:='a' to 'z' do
for s8:='a' to 'z' do
Memo1.Lines.Add(S1+S2+S3+S4+S5+S6+S7+S8);
end;А реально имеетсмысл смотреть в сторону рекурсии Последний раз редактировалось Cheetos, 17.03.2012 в 23:18. |
| Этот пользователь сказал Спасибо Cheetos за это полезное сообщение: | ||
UchusNaDelhi7 (18.03.2012)
| ||