|
|
#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)
|