Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Полный перебор (Оптимизация)

10K
20 февраля 2007 года
jey2004
11 / / 20.08.2005
В общем столкнулся с задачей полного перебора. Написал вот такую функцию. Перебирает давольно шустро но ресурсов жрет непомерно. Пароль длинны 5 (включающий все символы например x1-K+) еще можно вытянуть, а вот больше моя тачка не потянет (Pm 1.7 512Ram) ,да думаю и не только моя (. В Общем поскажите как оптимизировать. перебор вот код. Если можно прокомментируйте код, насколько грамотно написано. Заранее спасибо:)

***************************************************
void BruteFunc(char ln[MaxPassLen],int RorUs)
{
int i=0;
char un=' ';
char tn=' ';
char s[MaxPassLen];
char st1[MaxPassLen];
bool flag=false;
bool yes=false;
int tmpRorUs=-1;
tmpRorUs=RorUs;
int MaxNoOfChars=0;
int OptionLowerCaseLetters=0;
int OptionUpperCaseLetters=0;
int OptionNumbers=0;
int OptionSymbols=0;
char line[MaxPassLen]="";
char alphabet[128];
char NumSet[] = "0123456789\0";
char LletSet[] = "abcdefghijklmnopqrstuvwxyz\0";
char UletSet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\0";
char SymSet[] = "!@#$%^&*()'\\/+-=_<>?[]{}\0 ";
RorUs=NameInput(un,tn,RorUs);
cout << "Input pLen - ";
cin >> MaxNoOfChars;
int j=0;
cout << "Choose the Symbols of which ";
cout << "pass will consist" << endl;
cout << "LowerCaseLetters - ";
cin >> OptionLowerCaseLetters;
cout << "UpperCaseLetters - ";
cin >> OptionUpperCaseLetters;
cout << "NumberSt - ";
cin >> OptionNumbers;
cout << "SymbolSt - ";
cin >> OptionSymbols;

if (OptionLowerCaseLetters)
{
strcpy(alphabet,LletSet);
flag=true;
}
if (OptionUpperCaseLetters)
{
if (!flag)
{
strcpy(alphabet,UletSet);
flag=true;
}
else if (flag)
strcat(alphabet,UletSet);
}// end of UpCaseLet
if (OptionNumbers)
{
if (!flag)
{
strcpy(alphabet,NumSet);
flag=true;
}
else if (flag)
strcat(alphabet,NumSet);
}// end of Num
if (OptionSymbols)
{
if (!flag)
{
strcpy(alphabet,SymSet);
flag=true;
}
else if (flag)
strcat(alphabet,SymSet);
}// end of Sym
if (!flag)
{
SetConsoleTextAttribute(hStdout,(0x0c));
cout << "Error, bad allphabet choise"<< endl;
SetConsoleTextAttribute(hStdout,(0x0a));
goto fin;
}
int i14,i13,i12,i11,i10,i9,i8,i7,i6,i5,i4,i3,i2,i1;
switch(MaxNoOfChars) {
case 1:
goto for1;
break;
case 2:
goto for2;
break;
case 3:
goto for3;
break;
case 4:
goto for4;
break;
case 5:
goto for5;
break;
case 6:
goto for6;
break;
case 7:
goto for7;
break;
case 8:
goto for8;
break;
case 9:
goto for9;
break;
case 10:
goto for10;
break;
case 11:
goto for11;
break;
case 12:
goto for12;
break;
case 13:
goto for13;
break;
case 14:
goto for14;
break;
}
for14: for (i14=0;i14<strlen(alphabet);i14++)
{line=alphabet[i14];i++;
for13: for (i13=0;i13<strlen(alphabet);i13++)
{line=alphabet[i13];i++;
for12: for (i12=0;i12<strlen(alphabet);i12++)
{line=alphabet[i12];i++;
for11: for (i11=0;i11<strlen(alphabet);i11++)
{line=alphabet[i11];i++;
for10: for (i10=0;i10<strlen(alphabet);i10++)
{line=alphabet[i10];i++;
for9: for (i9=0;i9<strlen(alphabet);i9++)
{line=alphabet[i9];i++;
for8: for (i8=0;i8<strlen(alphabet);i8++)
{line=alphabet[i8];i++;
for7: for (i7=0;i7<strlen(alphabet);i7++)
{line=alphabet[i7];i++;
for6: for (i6=0;i6<strlen(alphabet);i6++)
{line=alphabet[i6];i++;
for5: for (i5=0;i5<strlen(alphabet);i5++)
{line=alphabet[i5];i++;
for4: for (i4=0;i4<strlen(alphabet);i4++)
{line=alphabet[i4];i++;
for3: for (i3=0;i3<strlen(alphabet);i3++)
{line=alphabet[i3];i++;
for2: for (i2=0;i2<strlen(alphabet);i2++)
{line=alphabet[i2];i++;
for1: for (i1=0;i1<strlen(alphabet);i1++)
{
line=alphabet[i1];
line[i+1]='\0';
strcpy(s,line);
itoa(User[RorUs].UsNum,st1,10);
strcat(s,st1);
HashFunc(s);
cout << s;
cout << "\b\b\b\b\b\b\b\b\b\b\b\b\b\b";
if (strcmp(User[RorUs].Passw,hash)==0)
{
yes=true;
goto finish;
}
line='\0';
if (i1==strlen(alphabet))
goto finish;
}
i--;
line='\0';
if (i2==strlen(alphabet))
goto finish;
}
i--;
line='\0';
if (i3==strlen(alphabet))
goto finish;
}
i--;
line='\0';
if (i4==strlen(alphabet))
goto finish;
}
i--;
line='\0';
if (i5==strlen(alphabet))
goto finish;
}
i--;
line='\0';
if (i6==strlen(alphabet))
goto finish;
}
i--;
line='\0';
if (i7==strlen(alphabet))
goto finish;
}
i--;
line='\0';
if (i8==strlen(alphabet))
goto finish;
}
i--;
line='\0';
if (i9==strlen(alphabet))
goto finish;
}
i--;
line='\0';
if (i10==strlen(alphabet))
goto finish;
}
i--;
line='\0';
if (i11==strlen(alphabet))
goto finish;
}
i--;
line='\0';
if (i12==strlen(alphabet))
goto finish;
}
i--;
line='\0';
if (i13==strlen(alphabet))
goto finish;
}
i--;
line='\0';
if (i14==strlen(alphabet))
goto finish;
}
finish:
if (strcmp("",line)!=0 && yes==true)
{
SetConsoleTextAttribute(hStdout,(0x0f));
cout << '\b';
cout << "Password is cracked =) ,";
cout << "here it is - " << line << endl;
goto fin;
}
else
cout << '\b';
SetConsoleTextAttribute(hStdout,(0x0c));
cerr << "Wrong pass legth or alphabet" << endl;
SetConsoleTextAttribute(hStdout,(0x0a));
fin:
RorUs=tmpRorUs;
}
************************************************
1.9K
20 февраля 2007 года
Borland_prog
149 / / 25.01.2006
хороший тон в написании программ - использование форматирования кода
П.с: читать не возможно.
1.9K
20 февраля 2007 года
Borland_prog
149 / / 25.01.2006
также гото - является плохим тоном для программиста.
При написании больших программ не всегда успешно найдешь лэйбу к которой обращается твое гото.
Лучше использовать функции и процедуры.
9
20 февраля 2007 года
Lerkin
3.0K / / 25.03.2003
Есть такая техника программирования, называется функциональная декомпозиция.

Определение:
Цитата:

Функциональная декомпозиция - метод разделения большой программы на маленькие, удобные и понятные функции. Начиная с общего описания того, что делает программа, метод разделяет действие на несколько шагов или абстрактных операций.


Попробуй применить данный метод. Заодно, это избавит тебя от использования не рекомендуемых операторов.

P.S. Дать совет по оптимизации твоего кода - представляется мало возможным. Его (код) и понять-то трудно...

10K
20 февраля 2007 года
jey2004
11 / / 20.08.2005
:) уж не знаю, но у меня трудностей представить все это не составило.
Чиатать то что я запостил действительно тяжко, а вообще в коде программы все выглядит очень понятно и однозначно.
10K
20 февраля 2007 года
jey2004
11 / / 20.08.2005
на счет меток не могу найти никакого оправдания, так как знаю, что ничего хорошего в них нет :) Что такое функциональная декомпозиция знаю давольно хорошо и использую, но в данном куске решил, что не стоит дробить функцию, да собственно там дробить то и нечего. Кода многовато но разбивать его смысла не вижу.

Да кстати багу свою исправил, память поджиралась из-за HashFunc() в которой упустил высвобождение памяти .

ВСЕМ СПАСИБО:) и удачи
252
22 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
всё коряво .
252
22 февраля 2007 года
koderAlex
1.4K / / 07.09.2005
в эту сторону топать http://www.wasm.ru/article.php?article=cycle_pwd
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог