Cześć!
Wykonuję program do łamania haseł metodą bruteforce ( jest to tylko szkolny projekt, nic groźnego) i mam pewien problem. W programie mam 2 funkcje: wyswietl_menu do pokazywania interfejsu i sterowania oraz metoda_slownikowa do porównywania haseł ze słowników z naszym wprowadzonym hasłem. Problem polega na tym, że funkcja wyswietl_menu nie chce wywołać funkcji metoda_slownikowa... Próbowałem używać samego kodu funkcji metoda_slownikowa i działa on bardzo dobrze tj. zgaduje hasła. Wydaje mi się że coś zagmatwałem w wywoływaniach funkcji, może chodzi o instrukcję switch-case?
Przy okazji nie wiem jeszcze jak się zabrać za sposób sterowania menu. Sterujemy podając odpowiedni numer opcji. Lecz gdy podamy całkiem inny numer lub inny znak program powinien wypisywać błąd i odnawiać działanie interfejsu, niestety wyłącza się, a gdy próbuję włączyć funkcję wyswietl_menu to zaczyna działać w kółko...
Z góry dzięki za pomoc!
#include <iostream>
#include <fstream>
using namespace std;
string haslo;
void metoda_slownikowa(string slownik){
string temp;
ifstream plik_we(slownik.c_str());
if (!plik_we.is_open()) {
cout<<"Nie ma takiego pliku!"<<endl;
return;
}
getline(plik_we, temp);
while(!plik_we.eof()){
if(temp==haslo){
cout<<"Haslo to: "<<temp<<endl;
plik_we.close();
return;
}
getline(plik_we, temp);
}
if(temp==haslo){
cout<<"Haslo to: "<<temp<<endl;
}
else{
cout<<"Nie udalo sie zlamac hasla!"<<endl;
}
plik_we.close();
return;
}
void wyswietl_menu(string &slownik, bool &losowe_znaki, int &dlugosc_hasla, bool &cyfry, bool &male_litery, bool &wielkie_litery, bool &znaki_specjalne, string &wyrazenie){
cout<<"*****************************************"<<endl;
cout<<"1.Metoda slownikowa"<<endl;
cout<<"2.Metoda na losowe znaki"<<endl;
cout<<"3.Wybierz dlugosc hasla"<<endl;
cout<<"4.Wyrazenie zawarte w hasle"<<endl;
cout<<"5.Opcje"<<endl;
cout<<"*****************************************"<<endl;
int wybor;
cin>>wybor;
string temp1;
int numer_slownika=1;
switch(wybor){
case 1:
system( "cls" ); /*Czyszczenie ekranu */
cout<<"Dostepne slowniki:"<<endl;
cout<<"1.1000000-password-seclists"<<endl;
cout<<"2.slownik1"<<endl;
cout<<"Wybierz numer slownika:"<<endl;
cin>>numer_slownika;
switch(numer_slownika){
case 1:
metoda_slownikowa("1000000-password-seclists");
break;
case 2:
metoda_slownikowa("slownik1");
break;
default:
cout<<"Podaj wlasciwy numer!"<<endl;
wyswietl_menu(slownik, losowe_znaki, dlugosc_hasla, cyfry, male_litery, wielkie_litery, znaki_specjalne, wyrazenie);
break;
}
system( "cls" ); /*Czyszczenie ekranu */
break;
case 2:
system( "cls" ); /*Czyszczenie ekranu */
/*Uruchom funkcje z losowymi znakami@@@@@@@@@@@@@@@@@@@@@@@@@@*/
break;
case 3:
system( "cls" ); /*Czyszczenie ekranu */
cout<<"Wpisz dlugosc hasla"<<endl;
cin>>dlugosc_hasla;
system( "cls" ); /*Czyszczenie ekranu */
wyswietl_menu(slownik, losowe_znaki, dlugosc_hasla, cyfry, male_litery, wielkie_litery, znaki_specjalne, wyrazenie);
break;
case 4:
system( "cls" ); /*Czyszczenie ekranu */
cout<<"Podaj wyrazenie zawarte w hasle"<<endl;
cin>>wyrazenie;
system( "cls" ); /*Czyszczenie ekranu */
wyswietl_menu(slownik, losowe_znaki, dlugosc_hasla, cyfry, male_litery, wielkie_litery, znaki_specjalne, wyrazenie);
break;
case 5:
system( "cls" ); /*Czyszczenie ekranu */
cout<<"Jesli chcesz wylaczyc opcje wpisz t"<<endl;
cout<<"Czy wylaczyc cyfry?"<<endl;
cin>>temp1;
if(temp1=="t"){
cyfry=false;
}
cout<<"Czy wylaczyc male litery?"<<endl;
cin>>temp1;
if(temp1=="t"){
male_litery=false;
}
cout<<"Czy wylaczyc wielkie litery?"<<endl;
cin>>temp1;
if(temp1=="t"){
wielkie_litery=false;
}
cout<<"Czy wylaczyc znaki specjalne?"<<endl;
cin>>temp1;
if(temp1=="t"){
znaki_specjalne=false;
}
system( "cls" ); /*Czyszczenie ekranu */
wyswietl_menu(slownik, losowe_znaki, dlugosc_hasla, cyfry, male_litery, wielkie_litery, znaki_specjalne, wyrazenie);
break;
default:
cout<<"Podaj numer 1-5!"<<endl;
cin>>wybor;
break;
}
}
int main()
{
string slownik="0";
bool losowe_znaki=false;
int dlugosc_hasla=0;
bool cyfry=true;
bool male_litery=true;
bool wielkie_litery=true;
bool znaki_specjalne=true;
string wyrazenie;
cout << "Lamanie hasel metoda BruteForce" << endl;
cout << "Wpisz haslo testowe" << endl;
cin>>haslo;
wyswietl_menu(slownik, losowe_znaki, dlugosc_hasla, cyfry, male_litery, wielkie_litery, znaki_specjalne, wyrazenie);
return 0;
}