Полный перебор (Оптимизация)
***************************************************
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;
}
************************************************
П.с: читать не возможно.
При написании больших программ не всегда успешно найдешь лэйбу к которой обращается твое гото.
Лучше использовать функции и процедуры.
Определение:
Цитата:
Функциональная декомпозиция - метод разделения большой программы на маленькие, удобные и понятные функции. Начиная с общего описания того, что делает программа, метод разделяет действие на несколько шагов или абстрактных операций.
Попробуй применить данный метод. Заодно, это избавит тебя от использования не рекомендуемых операторов.
P.S. Дать совет по оптимизации твоего кода - представляется мало возможным. Его (код) и понять-то трудно...
Чиатать то что я запостил действительно тяжко, а вообще в коде программы все выглядит очень понятно и однозначно.
Да кстати багу свою исправил, память поджиралась из-за HashFunc() в которой упустил высвобождение памяти .
ВСЕМ СПАСИБО:) и удачи
всё коряво .
в эту сторону топать