Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];

Вниз

Прога типа брутфорсера (алгоритм)   Найти похожие ветки 

 
Delpher_Gray   (2003-08-09 20:17) [0]

Уважаемые Delph"еры !!
Помогите с алгоритмом программы типа брутфорсера...
Есть строка например из 3-х букв: ABC, нужно из них перебрать все комбинации.
Что-то вроде:

A
B
C
AA
AB
AC
BA
BB
BC
CA
CB
CC
AAA
AAB
AAC
ABA
ABB
ABC
...........

Ну и так далее...
Я скока голову не ломал, не могу предумать алгоритм =(


 
Омлет   (2003-08-09 20:57) [1]

Сочувствую.


 
TButton   (2003-08-09 21:05) [2]

забей. у мню тоже не получается


 
Омлет   (2003-08-09 21:12) [3]

Что же это...
Я боюсь за будущее!


 
SergP   (2003-08-09 21:25) [4]

Вот вам небольшой пример. Правда он перебирает немного не в том порядке. Пауру минут потратил чтобы написать и запостить, но щас занят другими делами. Сами уже надеюсь доработаете.
Вот этот кусок проги:

procedure tform1.perebor(const s:string; const n:byte);
var
i:char;
begin
if length(s)>0 then memo1.lines.add(s); // ... brutforce(s);
if length(s)<n then
for i:="A" to "C" do perebor(s+i,n);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
perebor("",3);
end;

Перебирает в такой последовательности
A
AA
AAA
AAB
AAC
AB
ABA
ABB
ABC
AC
ACA
ACB
ACC
B
BA
BAA
BAB
BAC
BB
BBA
BBB
BBC
BC
BCA
BCB
BCC
C
CA
CAA
CAB
CAC
CB
CBA
CBB
CBC
CC
CCA
CCB
CCC


 
Anatoly Podgoretsky   (2003-08-09 21:25) [5]

Будущее не предопределено. Терминатор


 
SergP   (2003-08-09 21:27) [6]


Кстати если есть не диапазон а именно строка с дозволенными символами, то я думаю переделать вам не составит труда.


 
SergP   (2003-08-09 21:47) [7]

Типа так:
procedure tform1.perebor(const s,c:string; const n:byte);
var
i:byte;
begin
if length(s)<n then
for i:=1 to length(c) do perebor(s+c[i],c,n)
else memo1.lines.add(s); // brutforce (s+i);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
z:byte;
begin
for z:=1 to 3
do begin
perebor("","ABC",z);
end;
end;


 
SergP   (2003-08-09 21:48) [8]

Типа так:
procedure tform1.perebor(const s,c:string; const n:byte);
var
i:byte;
begin
if length(s)<n then
for i:=1 to length(c) do perebor(s+c[i],c,n)
else memo1.lines.add(s); // brutforce (s+i);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
z:byte;
begin
for z:=1 to 3 do perebor("","ABC",z);
end;


 
Paul-M   (2003-08-10 11:24) [9]

Лови аналогию:
0123456789
abcdefghij

Если 0-9 это символы в системе счисления а вместо цифр ты ипользуешь буквы - то 10 это ba. Алгоритм перевода из десятичной системы счисления в 26-ричную аналогичен переводу из десятичной в двоичную.
Также перебираешь от 0 до бесконечности, только записываешь число буквами - вот и все комбинации


 
SergP   (2003-08-10 12:06) [10]


> Paul-M © (10.08.03 11:24)
> Лови аналогию:
> 0123456789
> abcdefghij
>
> Если 0-9 это символы в системе счисления а вместо цифр ты
> ипользуешь буквы - то 10 это ba. Алгоритм перевода из десятичной
> системы счисления в 26-ричную аналогичен переводу из десятичной
> в двоичную.
> Также перебираешь от 0 до бесконечности, только записываешь
> число буквами - вот и все комбинации


Только если в разных случаях используются разные наборы символов - то этотим методом будет очень трудно реализовать.


 
nikus   (2003-08-10 12:32) [11]

Я делал так:

есть строка chars = "0123456789ABCDEFGI...."; в которой включены все буквы для перебора.

var
c, counter, len : integer;
s : string;

counter := 0;
repeat
inc(counter);
c := counter;
s := "";
while c <> 0 do
begin
j := c mod len;
if j = 0 then j := len;
s := chars[j] + s;
c := c div len;
if j = len then c := c - 1;
end;
Form1.Caption := s;
( s)
Я делал так:

есть строка chars = "0123456789ABCDEFGI...."; в которой включены все буквы для перебора.

var
c, counter, len : integer;
s : string;

counter := 0;
repeat
inc(counter);
c := counter;
s := "";
while c <> 0 do
begin
j := c mod len;
if j = 0 then j := len;
s := chars[j] + s;
c := c div len;
if j = len then c := c - 1;
end;
Form1.Caption := s;
Application.ProcessMessages;
until length(s) > 5;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
14-81890
Viktor Kushnir
2003-08-08 09:16
2003.08.25
Internet via e-mail


3-81590
led
2003-07-29 18:35
2003.08.25
Поле Memo вывести на грид


6-81858
Volly
2003-06-18 13:57
2003.08.25
Отключение от Internet-а


14-81868
Man
2003-08-08 13:07
2003.08.25
неинициализация параметрами при >1 объекте данного класса


1-81831
dataMaster
2003-08-13 12:58
2003.08.25
OpenDialog и его размеры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский