Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2010, 15:24   #1
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию Брутфорс (полный перебор)

Нужен алгоритм переборки набора букв с заданным алфавитом и заданным максимальным размером пароля. Ну, например алфавит: "abc", максимальный размер пароля - 5 букв. При этом, начинаются генерироваться пароли с одного символа, потом два, потом 3 и так до 5 символьных.

Если брать вышеупомянутые данные то мы должны получить такой набор паролей примерно:
a
b
c
aa
ba
ca
ab
bb
cb
ac
bc
cc
aaa
baa
caa
aba
bba
cba
aca
bca
cca
aab
bab
cab
abb
bbb
cbb

ну и так далее. Желательно обойтись без рекурсии, потому что каждый сгенерированый пароль отдается другому большому куску программы на обработку. Хотя можно и с рекурсией, как нибудь выкручусь. Я что-то туплю вообще похоже ((
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 12.09.2010, 15:31   #2
Tayfun
Форумчанин
 
Аватар для Tayfun
 
Регистрация: 24.06.2007
Сообщений: 351
По умолчанию

С алгоритмом думаю разберешься и модернизируешь для себя!
Код:
program bruter_modern;
uses crt;
const
s='1234567890qwertyuiopasdfghjklzxcvbnm!@#$%^&*()_+|-=\/.,:;'; {57}
n=11;
var
   m:array[1..n-1] of shortint;
   l,i:byte;
   t,j:longint;
   ss:string;
   f:text;
begin
   clrscr;
   write('Dline->');
   readln(l);
   t:=0; j:=0; ss:='';
   m[1]:=-1;
   str(j,ss);
   assign(f,'file'+ss+'.txt');
   rewrite(f);
   if l>10 then l:=10;
   writeln('poehali');
      while m[l+1]=0 do begin
         m[1]:=m[1]+1;
         t:=t+1;
         for i:=1 to l do
            if m[i]>56 then begin
               m[i]:=m[i]-57;
               m[i+1]:=m[i+1]+1;
            end;
         if t>1000000 then begin
            t:=0;
            j:=j+1;
            writeln('Kombinaciy->',j,'*',1000000);
            str(j,ss);
            close(f);
            assign(f,'file'+ss+'.txt');
            rewrite(f);
         end else begin
            for i:=1 to l do
               write(f,copy(s,m[i]+1,1));
            writeln(f);
         end;
      end;
   close(f);
   if j=0 then writeln('Kombinaciy->',t);
   writeln('Rebota sdelana');
   readkey;
end.
Я не маюсь бездельем, я от него тащусь!
Tayfun вне форума Ответить с цитированием
Старый 12.09.2010, 15:43   #3
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Спасибо. Жестокий алгоритм Будем разбираться.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 12.09.2010, 16:36   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

А есть ещё такое http://programmersforum.ru/showthread.php?t=26509
eoln вне форума Ответить с цитированием
Старый 12.09.2010, 17:19   #5
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Спасибо, это уже видел. Все-таки наверное свое напишу, как додумаю.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 12.09.2010, 17:52   #6
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

Комбинаторика в помощь
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab
ex.cluz вне форума Ответить с цитированием
Старый 12.09.2010, 20:04   #7
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

http://wasm.ru/article.php?article=cycle_pwd
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 12.09.2010, 20:14   #8
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Цитата:
Сообщение от DomiNick Посмотреть сообщение
Зачет! То, что нужно!
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 12.09.2010, 22:44   #9
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Адово быстро молотит ваще, супер. Спасибо отцам с wasm'а. Если кому-то понадобится вдруг - вот, перевел на паскаль.

Код:
Const
      Alphabet : String = 'abcdefghijklmnopqrstuvwxyz'; // задаем алфавит
Var
      szAlphabet : Array [0..255] of Char;
      szPassword : Array [0..255] of Char;      // текущий паpоль
      bAlphabet  : Array [0..255] of Char;      // таблица
      i,k : Byte;
Begin
      // пpеабазуем в массив байт
      For i := 1 to Length(Alphabet) do szAlphabet[i-1] := Alphabet[i];
      // сгенеpим таблицу
      i := 0;
      k := 0;
      repeat
        bAlphabet[k] := szAlphabet[i];
        if szAlphabet[i] = chr(0) then
            break;
        k := Ord(szAlphabet[i]);
        Inc(i);
      until false;
      // главный цикл
      repeat
            asm
                  pushad
                  mov edi,offset szPassword
                  mov ebx,offset bAlphabet
            @L1:  movzx eax,byte ptr [edi]
                  xlat
                  cmp al,0
                  je @L3
                  mov [edi],al
                  jmp @L5

            @L3:  xlat
                  stosb
                  jmp @L1

            @L5:  popad
            end;
            // печать каждого паpоля
            i := 0;
            repeat
               write(szPassword[i]);
               inc(i);
            until Ord(szPassword[i]) = 0;
            writeln;
      until false;
End.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полный перебор выражения Alex_sim Общие вопросы .NET 9 24.05.2010 09:50
Полный перебор или есть другие варианты? androidvsu Помощь студентам 8 12.03.2009 14:07
Брутфорс vitalik007 Общие вопросы Delphi 4 01.03.2008 18:58
Полный аминь AtomX Общие вопросы Delphi 4 25.12.2006 14:33