einfaches Bruteforce Prog mit fehler =C
-
hi ich wollt en Bruteforce Programm schreiben, bekomm aber immer so einen komischen Fehler.
Hier is erstmal des Prog:
#include <iostream> #include <string.h> using namespace std; int count_klein = 0, count_gross = 0, count_zahlen = 0, count_anzahl = 0; int aktuelles_zeichen; int anzahl_zeichen; char aktuelles_wort; //Buchstaben und Zahlen in Arrays speichern char kleingeschrieben[27] = "abcdefghijklmnopqrstuvwxyz"; char grossgeschrieben[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int zahlen[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; int main(){ cout<<"Wieviele Zeichen soll das Wort haben?\n"; cin>>anzahl_zeichen; char aktuelles_wort[anzahl_zeichen]; while(count_anzahl != anzahl_zeichen^(26+26+10)){ count_anzahl++; aktuelles_zeichen = 5; //Zeichen auswählen(zB: a/b/c/A/B/C/1/2/3) count_klein++; if(count_klein == 27){count_gross++; count_klein = 0;} if(count_gross == 27){count_zahlen++; count_gross = 0;} if(count_zahlen == 11){count_zahlen = 0; aktuelles_zeichen--;} while(strcmp(aktuelles_wort[aktuelles_zeichen], "0") != 0){aktuelles_wort[aktuelles_zeichen] = "a"; aktuelles_zeichen--;} //Wort bilden if(count_klein > 0){aktuelles_wort[aktuelles_zeichen] = kleingeschrieben[count_klein];} else if(count_gross > 0){aktuelles_wort[aktuelles_zeichen] = grossgeschrieben[count_gross];} else if(count_zahlen > 0){aktuelles_wort[aktuelles_zeichen] = grossgeschrieben[count_zahlen];} //wort ausgeben while(aktuelles_zeichen <= anzahl_zeichen){ cout<< "\n" << aktuelles_wort[aktuelles_zeichen]; } } }und hier der Fehler:
C:\Users\1337shaddow\Desktop\Daten\Programmieren\Cpp\Projekte\_unfertig_Brute_Forcer\brute forcer.cpp: In function `int main()': C:\Users\1337shaddow\Desktop\Daten\Programmieren\Cpp\Projekte\_unfertig_Brute_Forcer\brute forcer.cpp:27: error: invalid conversion from `char' to `const char*' C:\Users\1337shaddow\Desktop\Daten\Programmieren\Cpp\Projekte\_unfertig_Brute_Forcer\brute forcer.cpp:27: error: initializing argument 1 of `int strcmp(const char*, const char*)' C:\Users\1337shaddow\Desktop\Daten\Programmieren\Cpp\Projekte\_unfertig_Brute_Forcer\brute forcer.cpp:27: error: invalid conversion from `const char*' to `char'
-
Lese die Fehlermeldung, gehe zur Zeile, lies in der Hilfe die Funktionssignatur, vergleiche mit dem was du geschrieben hast, ...
Tip:
aktuelles_wort[aktuelles_zeichen] = "a", wobeiaktuelles_wort[aktuelles_zeichen]ein Zeichen ist, aber"a"ein C-String. Das gleiche beistrcmp.anzahl_zeichen^(26+26+10)ist auch recht komisch, wobei fuer 8^62 etwa 100*10^18. Angenommen dein Rechner schafft 10'000'000'000 (10*10^9) pro Sekunde, wie lange dauert wohl die Berechnung (von der Ausgabe ganz zu schweigen)?Btw. empfehle ich dir die Klassen der Standardbibliothek zu benutzen, z.b. std::string.
-
thx für die schnelle antwort, aber ich peils leider net
kannst du mir das nochmal einfacher erklären??Tip: aktuelles_wort[aktuelles_zeichen] = "a", wobei aktuelles_wort[aktuelles_zeichen] ein Zeichen ist, aber "a" ein C-String. Das gleiche bei strcmp.
anzahl_zeichen^(26+26+10)ist auch recht komisch, wobei fuer 8^62 etwa 100*10^18. Angenommen dein Rechner schafft 10'000'000'000 (10*10^9) pro Sekunde, wie lange dauert wohl die Berechnung (von der Ausgabe ganz zu schweigen)?das ist doch normal bei brute force programmen
EDIT:
ich weis nicht warum, aber ich kann keinen bietrag mehr schreiben. Und den ersten kann ich nicht editieren, weil ich da noch nicht registriert war. Das Problem ist jetzt jedenfalls gelöst.

der fertige code(falls es jemanden interessiert):#include <iostream> #include <string.h> #include <conio.h> using namespace std; int anzahl_zeichen, aktuelles_zeichen, counter = 0, counterIII=-1; bool abbruch = false; //Buchstaben und Zahlen in einem Array speichern char alle_zeichen[63] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; int main(){ //Liest ein wie viele zeichen das Wort aus der Brute-Force Attacke haben soll cout<<"Wieviele Zeichen soll das Wort haben?\n"; cin>>anzahl_zeichen; //erstellt einen leeren String mit der anzahl an zeichen als Länge char aktuelles_wort[anzahl_zeichen]; //Füllt das leere wort mit zeichen(immer "a") while(counterIII!=anzahl_zeichen-1){ counterIII++; aktuelles_wort[counterIII]='a';} //gibt das Wort aus, da es sonst bei aa...aaab anfangen würde cout<< aktuelles_wort << endl; //Die Schleife, die die Wörter generiert und ausgibt, mit der Abbruchsbedingung, die bei bhjkfgsduf(unten) überprüft wird while(abbruch == false){ //setzt den zähler, der die Position des Buchstaben angibt aktuelles_zeichen = anzahl_zeichen-1; //erhöht den counter, der den buchstaben bestimmt um eins höher counter++; //falls der counter mit der null fertig ist, wird als zeichen ein a gespeichert und das zeichen um eins zurückgesetzt //dann wird das so oft wiederholt, bis man beim ersten zeichen ankommt. Wenn das auch null ist wird die abbruchsbedingung erfüllt //und der Bool-schalter abbruch auf true gesetzt(bhjkfgsduf) if(counter == 62){ counter = 0; aktuelles_wort[aktuelles_zeichen] = alle_zeichen[0]; aktuelles_zeichen--; if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[0]){ aktuelles_wort[aktuelles_zeichen] = alle_zeichen[1];} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[1]){aktuelles_wort[aktuelles_zeichen] = alle_zeichen[2];} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[2]){aktuelles_wort[aktuelles_zeichen] = alle_zeichen[3];} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[3]){aktuelles_wort[aktuelles_zeichen] = alle_zeichen[4];} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[4]){aktuelles_wort[aktuelles_zeichen] = 'f';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[5]){aktuelles_wort[aktuelles_zeichen] = 'g';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[6]){aktuelles_wort[aktuelles_zeichen] = 'h';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[7]){aktuelles_wort[aktuelles_zeichen] = 'i';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[8]){aktuelles_wort[aktuelles_zeichen] = 'j';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[9]){aktuelles_wort[aktuelles_zeichen] = 'k';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[10]){aktuelles_wort[aktuelles_zeichen] = 'l';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[11]){aktuelles_wort[aktuelles_zeichen] = 'm';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[12]){aktuelles_wort[aktuelles_zeichen] = 'n';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[13]){aktuelles_wort[aktuelles_zeichen] = 'o';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[14]){aktuelles_wort[aktuelles_zeichen] = 'p';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[15]){aktuelles_wort[aktuelles_zeichen] = 'q';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[16]){aktuelles_wort[aktuelles_zeichen] = 'r';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[17]){aktuelles_wort[aktuelles_zeichen] = 's';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[18]){aktuelles_wort[aktuelles_zeichen] = 't';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[19]){aktuelles_wort[aktuelles_zeichen] = 'u';} else if(aktuelles_wort[aktuelles_zeichen] == 'u'){aktuelles_wort[aktuelles_zeichen] = 'v';} else if(aktuelles_wort[aktuelles_zeichen] == 'v'){aktuelles_wort[aktuelles_zeichen] = 'w';} else if(aktuelles_wort[aktuelles_zeichen] == 'w'){aktuelles_wort[aktuelles_zeichen] = 'x';} else if(aktuelles_wort[aktuelles_zeichen] == 'x'){aktuelles_wort[aktuelles_zeichen] = 'y';} else if(aktuelles_wort[aktuelles_zeichen] == 'y'){aktuelles_wort[aktuelles_zeichen] = 'z';} else if(aktuelles_wort[aktuelles_zeichen] == 'z'){aktuelles_wort[aktuelles_zeichen] = 'A';} else if(aktuelles_wort[aktuelles_zeichen] == 'A'){aktuelles_wort[aktuelles_zeichen] = 'B';} else if(aktuelles_wort[aktuelles_zeichen] == 'B'){aktuelles_wort[aktuelles_zeichen] = 'C';} else if(aktuelles_wort[aktuelles_zeichen] == 'C'){aktuelles_wort[aktuelles_zeichen] = 'D';} else if(aktuelles_wort[aktuelles_zeichen] == 'D'){aktuelles_wort[aktuelles_zeichen] = 'E';} else if(aktuelles_wort[aktuelles_zeichen] == 'E'){aktuelles_wort[aktuelles_zeichen] = 'F';} else if(aktuelles_wort[aktuelles_zeichen] == 'F'){aktuelles_wort[aktuelles_zeichen] = 'G';} else if(aktuelles_wort[aktuelles_zeichen] == 'G'){aktuelles_wort[aktuelles_zeichen] = 'H';} else if(aktuelles_wort[aktuelles_zeichen] == 'H'){aktuelles_wort[aktuelles_zeichen] = 'I';} else if(aktuelles_wort[aktuelles_zeichen] == 'I'){aktuelles_wort[aktuelles_zeichen] = 'J';} else if(aktuelles_wort[aktuelles_zeichen] == 'J'){aktuelles_wort[aktuelles_zeichen] = 'K';} else if(aktuelles_wort[aktuelles_zeichen] == 'K'){aktuelles_wort[aktuelles_zeichen] = 'L';} else if(aktuelles_wort[aktuelles_zeichen] == 'L'){aktuelles_wort[aktuelles_zeichen] = 'M';} else if(aktuelles_wort[aktuelles_zeichen] == 'M'){aktuelles_wort[aktuelles_zeichen] = 'N';} else if(aktuelles_wort[aktuelles_zeichen] == 'N'){aktuelles_wort[aktuelles_zeichen] = 'O';} else if(aktuelles_wort[aktuelles_zeichen] == 'O'){aktuelles_wort[aktuelles_zeichen] = 'P';} else if(aktuelles_wort[aktuelles_zeichen] == 'P'){aktuelles_wort[aktuelles_zeichen] = 'Q';} else if(aktuelles_wort[aktuelles_zeichen] == 'Q'){aktuelles_wort[aktuelles_zeichen] = 'R';} else if(aktuelles_wort[aktuelles_zeichen] == 'R'){aktuelles_wort[aktuelles_zeichen] = 'S';} else if(aktuelles_wort[aktuelles_zeichen] == 'S'){aktuelles_wort[aktuelles_zeichen] = 'T';} else if(aktuelles_wort[aktuelles_zeichen] == 'T'){aktuelles_wort[aktuelles_zeichen] = 'U';} else if(aktuelles_wort[aktuelles_zeichen] == 'U'){aktuelles_wort[aktuelles_zeichen] = 'V';} else if(aktuelles_wort[aktuelles_zeichen] == 'V'){aktuelles_wort[aktuelles_zeichen] = 'W';} else if(aktuelles_wort[aktuelles_zeichen] == 'W'){aktuelles_wort[aktuelles_zeichen] = 'X';} else if(aktuelles_wort[aktuelles_zeichen] == 'X'){aktuelles_wort[aktuelles_zeichen] = 'Y';} else if(aktuelles_wort[aktuelles_zeichen] == 'Y'){aktuelles_wort[aktuelles_zeichen] = 'Z';} else if(aktuelles_wort[aktuelles_zeichen] == 'Z'){aktuelles_wort[aktuelles_zeichen] = '1';} else if(aktuelles_wort[aktuelles_zeichen] == '1'){aktuelles_wort[aktuelles_zeichen] = '2';} else if(aktuelles_wort[aktuelles_zeichen] == '2'){aktuelles_wort[aktuelles_zeichen] = '3';} else if(aktuelles_wort[aktuelles_zeichen] == '3'){aktuelles_wort[aktuelles_zeichen] = '4';} else if(aktuelles_wort[aktuelles_zeichen] == '4'){aktuelles_wort[aktuelles_zeichen] = '5';} else if(aktuelles_wort[aktuelles_zeichen] == '5'){aktuelles_wort[aktuelles_zeichen] = '6';} else if(aktuelles_wort[aktuelles_zeichen] == '6'){aktuelles_wort[aktuelles_zeichen] = '7';} else if(aktuelles_wort[aktuelles_zeichen] == '7'){aktuelles_wort[aktuelles_zeichen] = '8';} else if(aktuelles_wort[aktuelles_zeichen] == '8'){aktuelles_wort[aktuelles_zeichen] = '9';} else if(aktuelles_wort[aktuelles_zeichen] == '9'){aktuelles_wort[aktuelles_zeichen] = '0';} while(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[61] && aktuelles_zeichen >= 0){ aktuelles_wort[aktuelles_zeichen] = alle_zeichen[0]; aktuelles_zeichen = aktuelles_zeichen - 1; //Erhöht das andere Zeichen um eins //alle_zeichen[] if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[0]){aktuelles_wort[aktuelles_zeichen] = alle_zeichen[1];} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[1]){aktuelles_wort[aktuelles_zeichen] = alle_zeichen[2];} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[2]){aktuelles_wort[aktuelles_zeichen] = alle_zeichen[3];} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[3]){aktuelles_wort[aktuelles_zeichen] = alle_zeichen[4];} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[4]){aktuelles_wort[aktuelles_zeichen] = 'f';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[5]){aktuelles_wort[aktuelles_zeichen] = 'g';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[6]){aktuelles_wort[aktuelles_zeichen] = 'h';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[7]){aktuelles_wort[aktuelles_zeichen] = 'i';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[8]){aktuelles_wort[aktuelles_zeichen] = 'j';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[9]){aktuelles_wort[aktuelles_zeichen] = 'k';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[10]){aktuelles_wort[aktuelles_zeichen] = 'l';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[11]){aktuelles_wort[aktuelles_zeichen] = 'm';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[12]){aktuelles_wort[aktuelles_zeichen] = 'n';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[13]){aktuelles_wort[aktuelles_zeichen] = 'o';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[14]){aktuelles_wort[aktuelles_zeichen] = 'p';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[15]){aktuelles_wort[aktuelles_zeichen] = 'q';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[16]){aktuelles_wort[aktuelles_zeichen] = 'r';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[17]){aktuelles_wort[aktuelles_zeichen] = 's';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[18]){aktuelles_wort[aktuelles_zeichen] = 't';} else if(aktuelles_wort[aktuelles_zeichen] == alle_zeichen[19]){aktuelles_wort[aktuelles_zeichen] = 'u';} else if(aktuelles_wort[aktuelles_zeichen] == 'u'){aktuelles_wort[aktuelles_zeichen] = 'v';} else if(aktuelles_wort[aktuelles_zeichen] == 'v'){aktuelles_wort[aktuelles_zeichen] = 'w';} else if(aktuelles_wort[aktuelles_zeichen] == 'w'){aktuelles_wort[aktuelles_zeichen] = 'x';} else if(aktuelles_wort[aktuelles_zeichen] == 'x'){aktuelles_wort[aktuelles_zeichen] = 'y';} else if(aktuelles_wort[aktuelles_zeichen] == 'y'){aktuelles_wort[aktuelles_zeichen] = 'z';} else if(aktuelles_wort[aktuelles_zeichen] == 'z'){aktuelles_wort[aktuelles_zeichen] = 'A';} else if(aktuelles_wort[aktuelles_zeichen] == 'A'){aktuelles_wort[aktuelles_zeichen] = 'B';} else if(aktuelles_wort[aktuelles_zeichen] == 'B'){aktuelles_wort[aktuelles_zeichen] = 'C';} else if(aktuelles_wort[aktuelles_zeichen] == 'C'){aktuelles_wort[aktuelles_zeichen] = 'D';} else if(aktuelles_wort[aktuelles_zeichen] == 'D'){aktuelles_wort[aktuelles_zeichen] = 'E';} else if(aktuelles_wort[aktuelles_zeichen] == 'E'){aktuelles_wort[aktuelles_zeichen] = 'F';} else if(aktuelles_wort[aktuelles_zeichen] == 'F'){aktuelles_wort[aktuelles_zeichen] = 'G';} else if(aktuelles_wort[aktuelles_zeichen] == 'G'){aktuelles_wort[aktuelles_zeichen] = 'H';} else if(aktuelles_wort[aktuelles_zeichen] == 'H'){aktuelles_wort[aktuelles_zeichen] = 'I';} else if(aktuelles_wort[aktuelles_zeichen] == 'I'){aktuelles_wort[aktuelles_zeichen] = 'J';} else if(aktuelles_wort[aktuelles_zeichen] == 'J'){aktuelles_wort[aktuelles_zeichen] = 'K';} else if(aktuelles_wort[aktuelles_zeichen] == 'K'){aktuelles_wort[aktuelles_zeichen] = 'L';} else if(aktuelles_wort[aktuelles_zeichen] == 'L'){aktuelles_wort[aktuelles_zeichen] = 'M';} else if(aktuelles_wort[aktuelles_zeichen] == 'M'){aktuelles_wort[aktuelles_zeichen] = 'N';} else if(aktuelles_wort[aktuelles_zeichen] == 'N'){aktuelles_wort[aktuelles_zeichen] = 'O';} else if(aktuelles_wort[aktuelles_zeichen] == 'O'){aktuelles_wort[aktuelles_zeichen] = 'P';} else if(aktuelles_wort[aktuelles_zeichen] == 'P'){aktuelles_wort[aktuelles_zeichen] = 'Q';} else if(aktuelles_wort[aktuelles_zeichen] == 'Q'){aktuelles_wort[aktuelles_zeichen] = 'R';} else if(aktuelles_wort[aktuelles_zeichen] == 'R'){aktuelles_wort[aktuelles_zeichen] = 'S';} else if(aktuelles_wort[aktuelles_zeichen] == 'S'){aktuelles_wort[aktuelles_zeichen] = 'T';} else if(aktuelles_wort[aktuelles_zeichen] == 'T'){aktuelles_wort[aktuelles_zeichen] = 'U';} else if(aktuelles_wort[aktuelles_zeichen] == 'U'){aktuelles_wort[aktuelles_zeichen] = 'V';} else if(aktuelles_wort[aktuelles_zeichen] == 'V'){aktuelles_wort[aktuelles_zeichen] = 'W';} else if(aktuelles_wort[aktuelles_zeichen] == 'W'){aktuelles_wort[aktuelles_zeichen] = 'X';} else if(aktuelles_wort[aktuelles_zeichen] == 'X'){aktuelles_wort[aktuelles_zeichen] = 'Y';} else if(aktuelles_wort[aktuelles_zeichen] == 'Y'){aktuelles_wort[aktuelles_zeichen] = 'Z';} else if(aktuelles_wort[aktuelles_zeichen] == 'Z'){aktuelles_wort[aktuelles_zeichen] = '1';} else if(aktuelles_wort[aktuelles_zeichen] == '1'){aktuelles_wort[aktuelles_zeichen] = '2';} else if(aktuelles_wort[aktuelles_zeichen] == '2'){aktuelles_wort[aktuelles_zeichen] = '3';} else if(aktuelles_wort[aktuelles_zeichen] == '3'){aktuelles_wort[aktuelles_zeichen] = '4';} else if(aktuelles_wort[aktuelles_zeichen] == '4'){aktuelles_wort[aktuelles_zeichen] = '5';} else if(aktuelles_wort[aktuelles_zeichen] == '5'){aktuelles_wort[aktuelles_zeichen] = '6';} else if(aktuelles_wort[aktuelles_zeichen] == '6'){aktuelles_wort[aktuelles_zeichen] = '7';} else if(aktuelles_wort[aktuelles_zeichen] == '7'){aktuelles_wort[aktuelles_zeichen] = '8';} else if(aktuelles_wort[aktuelles_zeichen] == '8'){aktuelles_wort[aktuelles_zeichen] = '9';} else if(aktuelles_wort[aktuelles_zeichen] == '9'){aktuelles_wort[aktuelles_zeichen] = '0';} }//von der while(aktuelles_wort[aktuelles_zeichen} == '0' ... if(aktuelles_zeichen==0 && aktuelles_wort[aktuelles_zeichen] == alle_zeichen[61]){abbruch=true;}//bhjkfgsduf }//von der if(counter ==63) aktuelles_zeichen = anzahl_zeichen-1; //dann wird das zeichen in dem Wort gespeichert und ausgegeben. aktuelles_wort[aktuelles_zeichen] = alle_zeichen[counter]; cout<< aktuelles_wort << endl; }//von der while(true) getch(); }//von der int mainden kann man jetzt natürlich noch optimieren(z.B. das erzeugte in eine Datei umleiten, oder so).
-
1337shaddow schrieb:
thx für die schnelle antwort, aber ich peils leider net
kannst du mir das nochmal einfacher erklären??:Tip: aktuelles_wort[aktuelles_zeichen] = "a", wobei aktuelles_wort[aktuelles_zeichen] ein Zeichen ist, aber "a" ein C-String. Das gleiche bei strcmp.
'a' ist ein Zeichen, ein
char. "a" ist ein Zeiger auf einen C-String, das heißt einchar*, bzw. hier (weil es ein fest eingebauter String ist) einconst char*.Achte auf den Unterschied zwischen den beiden Hochkommatypen.
-
also soll ich das "a" durch 'a' ersetzen?
weil das hab ich gemacht, aber es kommen immernoch 2 fehlermeldungen
C:\Users\1337shaddow\Desktop\Daten\Programmieren\Cpp\Projekte\_unfertig_Brute_Forcer\brute forcer.cpp: In function `int main()': C:\Users\1337shaddow\Desktop\Daten\Programmieren\Cpp\Projekte\_unfertig_Brute_Forcer\brute forcer.cpp:27: error: invalid conversion from `char' to `const char*' C:\Users\1337shaddow\Desktop\Daten\Programmieren\Cpp\Projekte\_unfertig_Brute_Forcer\brute forcer.cpp:27: error: initializing argument 1 of `int strcmp(const char*, const char*)'
-
weil das hab ich gemacht
Und was ist mit
strcmp? Und: Es ist nur eine Fehlermeldung.das ist doch normal bei brute force programmen
Es dauert viele Milliarden Jahre ...
-
was soll ich mit strcmp machen? Das gleiche mit der "0" machen?('0')
das ist doch normal bei brute force programmen
Es dauert viele Milliarden Jahre ...
hmmm des wäre natürlich schei...
-
1337shaddow schrieb:
was soll ich mit strcmp machen? Das gleiche mit der "0" machen?('0')
Du sollst nicht einfach wild mit den Tipps die dir gegeben wurden rumspielen, sondern sie verstehen
. Dann bekommst du dein Problem selber gelöst.1. Tipp: Guck dir die Fehlermeldung an:
C:\Users\1337shaddow\Desktop\Daten\Programmieren\Cpp\Projekte\_unfertig_Brute_Forcer\brute forcer.cpp:27: error: invalid conversion from `char' to `const char*' C:\Users\1337shaddow\Desktop\Daten\Programmieren\Cpp\Projekte\_unfertig_Brute_Forcer\brute forcer.cpp:27: error: initializing argument 1 of `int strcmp(const char*, const char*)'1. Zeile: Aha! Da steht, dass char nicht in const char* umgewandelt werden konnte, was nicht verwunderlich ist, denn man kann auch nicht eine Leinwand in einen Laserpointer umwandeln, auch wenn der Laserpointer auf die Leinwand zeigt. Bleibt die Frage, warum sollte dies überhaupt geschehen?
2. Zeile: Aha, da wurde eine Funktion strcmp aufgerufen, die zweimal einen const char* erwartet. Und beim ersten Argument hat benannte Umwandlung nicht geklappt.
Schlussfolgerung: Da wurde als erstes Argument wohl ein char übergeben, obwohl ein const char* erwartet wurde. Und in der Tat ist aktuelles_wort[aktuelles_zeichen]ein char.2. Tipp: "a" ist ein const char*, 'a' ist ein char. Denken wir noch einmal nach, was du mit strcmp erreichen wolltest: Du wolltest zwei Zeichen vergleichen. Nicht Strings (const char*), wozu strcmp gedacht ist. Also mach einfach
if aktuelles_wort[aktuelles_zeichen]=='a')!3. Tipp: Das gleiche gilt für die darauf folgende Zuweisung. Du versuchst hier einem char einen const char* zuzuweisen, was nicht funktionieren wird. Du weißt, was du zu tun hast...
4. Tipp: Nutze die C++-Standardbibliothek, statt der C-Standardbibliothek. Ernsthaft. Du machst es dir bloß selbst schwer. Besonders beim Arbeiten mit Zeichenketten.
-
Juhu!! Es zeigt keine Fehlermeldung mehr an
Des dumme: ich geb für die Anzahl der Buchstaben 3 ein, und dann kommt nix mehr!!

Noch ne dumme Frage:
was ist die C++ standard-Bibioitek???Edit:
Ok. Jetzt bin ich total verwirrt. ich geb als Wert 123 ein und dann kommt als brute force-wert immer nur "b".

Geh jetzt off. Muss ins Bett. Bis morgen!
-
while(count_anzahl != anzahl_zeichen^(26+26+10)){
Falls du mit ^ "x hoch y" meinst: in c++ hat ^ eine andere Bedeutung:
http://de.wikibooks.org/wiki/C%2B%2B-Programmierung:_Operatoren#.5E_.28exklusive_Oder-Verkn.C3.BCpfung.29für hoch benutze pow ()
Warum packst du Zahlen, gross und klein Buchstaben eigentlich in verschiedene Arrays?
-
brutus der forcer schrieb:
Warum packst du Zahlen, gross und klein Buchstaben eigentlich in verschiedene Arrays?
Jetzt wo dus sagst...
wäre eigentlich einfacher, wenn man ein array mit namen zeichen machen würdeIch hab das Prog jetzt mal neu aufgesetzt, aber jetzt isses noch komischer wie davor.
egal, welchen wert man für anzahl_zeichen angibt, man bekommt als ausgabe nur \n. Nach ner weile kommt dann eine Fehlermeldung von Win 7(bruteforcer.exe funktioniert nicht mehr. es wird nach einer lösung für das problem gesucht...Oh für 1 bekommt man als ausgabe immer pbD

#include <iostream> #include <string.h> #include <math.h> #include <conio.h> using namespace std; int anzahl_zeichen, aktuelles_zeichen, counter = 0, counterII=0; //Buchstaben und Zahlen in einem Array speichern char alle_zeichen[63] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; int main(){ cout<<"Wieviele Zeichen soll das Wort haben?\n"; cin>>anzahl_zeichen; char aktuelles_wort[anzahl_zeichen]; while(counterII != pow(anzahl_zeichen, 62)){ counterII++; aktuelles_zeichen = anzahl_zeichen; counter++; if(counter == 63){ aktuelles_zeichen--; while(aktuelles_wort[aktuelles_zeichen] == '0'){aktuelles_wort[aktuelles_zeichen] = 'a'; aktuelles_zeichen--;} }//von der if(counter ==63) aktuelles_wort[aktuelles_zeichen] = alle_zeichen[counter]; cout<< aktuelles_wort << endl; }//von der while(true) getch(); }//von der int main
-
Schreib dir nochmal sauber auf, wie dein Programm funktionieren soll. Falls das Programm alle Buchstabenkombinationen einer bestimmten Länge ausgeben soll, sehe ich nicht, wie du dir das bei diesem Code überhaupt vorstellst. Da werden wild die Werte von irgendwelchen Zählern verändert, ohne dass ein System erkennbar wäre.
Und setze unbedingt den Tipp mit der Benutzung von C++-Mitteln um. Du hast offensichtlich nicht viel Erfahrung im Umgang mit C-Strings, also warum nicht gleich das einfach benutzbare std::string nehmen? Das was du da derzeit mit den C-Strings treibst ist nämlich falsch und erzeugt undefiniertes Verhalten.
Und das Buch/Lehrwerk aus dem du die Begriffe math.h und string.h hast, ist hoffnungslos veraltet. Du solltest davon Abstand nehmen.
-
Ok das programm soll so funktionieren:
1. Es fragt nach wieviele zeichen die wörter haben sollen
2. Es bildet alle möglichen Wörter aus den Zeichen a-z, A-Z, 1-0
Zum beispiel(3Buchstaben):
aaa
aab
aac
aad
...
aaz
aaA
...
aa0
aba
...
-
Jaaaa, das dachte ich mir schon.
Aber die Frage ist doch eher, wie du dir vorstellst, wie das funktionieren soll!
Gehen wir mal dein Programm einen Durchlauf mit Länge 2 durch und gucken, was passiert (und ignorieren dabei das undefinierte Verhalten, sondern tun das, was du dir gedacht hast):
[b]Anfang[/b]: anzahl_zeichen = 2 aktuelles_wort: zwei chars, werte ungesetzt counter = 0 counterII = 0 aktuelles_zeichen: ungesetzt [b]while(counterII != pow(anzahl_zeichen, 62))[/b] 0 != 2 hoch 62. Schleife wird begonnen :warning: Hier das erste Mal undefiniertes Verhalten. Auf vielen Systemen ist 2 hoch 62 > INT_MAX. Dies wird oftmals zu Endlosschleifen führen. :warning: [b]counterII++;[/b] counterII = 1 [b]aktuelles_zeichen = anzahl_zeichen;[/b] aktuelles_zeichen = 2 [b]counter++;[/b] counter = 1 [b]if(counter == 63)[/b] 1 ungleich 63, if-Bedingung wird nicht ausgeführt [b]aktuelles_wort[aktuelles_zeichen] = alle_zeichen[counter];[/b] zweites zeichen von aktuelles Wort wird erstes Zeichen von alle_zeichen, also 'a'. :warning: Undefiniertes Verhalten! Arrays beginnen bei 0! Es gibt kein aktuelles_wort[2], nur [0] und [1]. ebenso ist alle_zeichen[1] 'b' und nicht 'a' :warning: [b]cout<< aktuelles_wort << endl;[/b] aktuelles_wort wird ausgegeben. Dieses besteht aus einem ungesetzten Zeichen, gefolgt von einem 'a'-Zeichen. :warning: Wieder undefiniertes Verhalten! C-Strings funktionieren so einfach nicht! Ich will dir jetzt nicht den ganzen Umgang damit erklären, wenn std::string so nahe liegt, aber diese Aktion hier würde wild Werte aus dem Speicher auf die Standardausgabe schreiben. :warning: [b] Nächste Runde[/b] Die erste Rund hat ja schon nur Quatsch gemacht. Sie hätte "<undefiniert>a" ausgegeben wie du es gedacht hast, und sie gibt irgendwas total undefiniertes aus, weil du mit unnötig komplizierten Sachen hantierst, die du nicht verstehst. Ich glaube die nächste Iteration der Schleife kann ich mir sparen.
-
Danke für den tipp ich habs en bissel verändert und es funktioniert fast perfekt!!!

#include <iostream> #include <string.h> #include <math.h> #include <conio.h> using namespace std; int anzahl_zeichen, aktuelles_zeichen, counter = 0, counterIII=-1; long double counterII; //Buchstaben und Zahlen in einem Array speichern char alle_zeichen[63] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; int main(){ cout<<"Wieviele Zeichen soll das Wort haben?\n"; cin>>anzahl_zeichen; char aktuelles_wort[anzahl_zeichen]; while(counterIII!=anzahl_zeichen-1){ counterIII++; aktuelles_wort[counterIII]='a';} while(counterII != pow(anzahl_zeichen, 62)){ counterII++; aktuelles_zeichen = anzahl_zeichen-1; counter++; if(counter == 63){ aktuelles_zeichen--; while(aktuelles_wort[aktuelles_zeichen] == '0'){aktuelles_wort[aktuelles_zeichen] = 'a'; aktuelles_zeichen--;} }//von der if(counter ==63) aktuelles_zeichen=anzahl_zeichen-1; aktuelles_wort[aktuelles_zeichen] = alle_zeichen[counter]; cout<< aktuelles_wort << endl; getch(); }//von der while(true) getch(); }//von der int mainwenn ich jetzt 2 eingeb, dann kommt erst aa, dann ab, ac, ad..., a9, a0, und dann kommt ganz oft a und ab und zu noch sonderzeichen, von denen ich gar nicht gewusst hab, dass es die gibt(Musiknoten, weiblichzeichen, smilie, Play-zeichen, ü in der Konsole!, ae, e mit zwei punkten drauf, usw. Das gleiche passiert wenn ich 3,4,5,6,.. eingeb.
-
Du kannst Dir das wir beim Zählen vorstellen:
000
001
002
003
...
999Dasselbe willst Du mit Zeichen machen. Bei Zahlen ist der Zeichenvorrat [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]. Das gilt für jede Stelle. Wenn Du also für die niedrigste Stelle (im Beispiel oben ganz rechts), durch den Zeichenvorrat läufst und bei der '9' ankommst, ist das nächste Zeichen wieder die 0 und in der folgenden Stelle musst Du um eins im Zeichenvorrat weiter gehen.
Vielleicht helfen Dir die Überlegungen ja beim Realisieren des Algorithmus.
-
Wie gesagt: C-Strings und du hast keine Ahnung wie du damit umzugehen hast. Außerdem Überläufe. Vielleicht war ich etwas zu mild, als ich dich oben vor undefiniertem Verhalten gewarnt habe. Das klingt so harmlos. Es sind schwerwiegende Fehler! Alles was ich mit
markiert hatte, ist grundlegend falsch. Die Arrayzählung scheinst du verbessert zu haben (habe ich jetzt aber nicht kontrolliert). Die anderen Sachen musst du dir unbedingt nochmal anschauen. Zum Beispiel könntest du die Abbruchbedingung der ersten Schleife so setzen, dass alle Buchstaben '0' sein müssen, damit das Programm endet.Ob der verbesserte Algorithmus stimmt, mag ich jetzt nicht beurteilen, das bekommst du hoffentlich selber raus. es sieht unnötig kompliziert aus (ich würde es viel einfacher machen), aber das macht es ja nicht unbedingt falsch. Ein paar Kommentare dürften nicht schaden, dann kann man dir besser helfen.
-
Wieder undefiniertes Verhalten! C-Strings funktionieren so einfach
nicht! Ich will dir jetzt nicht den ganzen Umgang damit erklären, wenn
std::string so nahe liegt, aber diese Aktion hier würde wild Werte aus dem
Speicher auf die Standardausgabe schreiben.
das hab ich net gepeilt. Was ist überhaupt str::string? und warum schreibt das wie wild werte aus dem Speicher?
Ich hab nochmal die abbruchsbedingung verändert
#include <iostream> #include <string.h> #include <conio.h> using namespace std; int anzahl_zeichen, aktuelles_zeichen, counter = 0, counterIII=-1; bool abbruch = false; //Buchstaben und Zahlen in einem Array speichern char alle_zeichen[63] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; int main(){ cout<<"Wieviele Zeichen soll das Wort haben?\n"; cin>>anzahl_zeichen; char aktuelles_wort[anzahl_zeichen]; while(counterIII!=anzahl_zeichen-1){ counterIII++; aktuelles_wort[counterIII]='a';} while(abbruch == false){ aktuelles_zeichen = anzahl_zeichen-1; counter++; if(counter == 63){ aktuelles_zeichen--; while(aktuelles_wort[aktuelles_zeichen] == '0' && aktuelles_zeichen >= 0){aktuelles_wort[aktuelles_zeichen] = 'a'; aktuelles_zeichen--;} if(aktuelles_zeichen==0){abbruch=true; } }//von der if(counter ==63) aktuelles_wort[aktuelles_zeichen] = alle_zeichen[counter]; cout<< aktuelles_wort << endl; getch(); }//von der while(true) getch(); }//von der int mainAso und Kommentare folgen noch
-
1337shaddow schrieb:
das hab ich net gepeilt. Was ist überhaupt str::string?
Google: std::string
http://www.cplusplus.com/reference/string/string/
http://en.wikipedia.org/wiki/String_(C%2B%2B)und warum schreibt das wie wild werte aus dem Speicher?
http://en.wikipedia.org/wiki/C_string
http://en.wikipedia.org/wiki/C_string#Limitations
-
ah danke das muss ich mir noch alles durchlesen.
Und ich hab den code jetzt mit Kommentaren versehen(und leicht verändert). hoffe das hilft.
#include <iostream> #include <string.h> #include <conio.h> using namespace std; int anzahl_zeichen, aktuelles_zeichen, counter = 0, counterIII=-1; bool abbruch = false; //Buchstaben und Zahlen in einem Array speichern char alle_zeichen[63] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; int main(){ //Liest ein wie viele zeichen das Wort aus der Brute-Force Attacke haben soll cout<<"Wieviele Zeichen soll das Wort haben?\n"; cin>>anzahl_zeichen; //erstellt einen leeren String mit der anzahl an zeichen als Länge char aktuelles_wort[anzahl_zeichen]; //Füllt das leere wort mit zeichen(immer "a") while(counterIII!=anzahl_zeichen-1){ counterIII++; aktuelles_wort[counterIII]='a';} //Die Schleife, die die Wörter generiert und ausgibt, mit der Abbruchsbedingung, die bei bhjkfgsduf(unten) überprüft wird while(abbruch == false){ //setzt den zähler, der die Position des Buchstaben angibt aktuelles_zeichen = anzahl_zeichen-1; //erhöht den counter, der den buchstaben bestimmt um eins höher counter++; //falls der counter mit der null fertig ist, wird als zeichen ein a gespeichert und das zeichen um eins zurückgesetzt //dann wird das so oft wiederholt, bis man beim ersten zeichen ankommt. Wenn das auch null ist wird die abbruchsbedingung erfüllt //und der Bool-schalter abbruch auf true gesetzt(bhjkfgsduf) if(counter == 63){ aktuelles_wort[aktuelles_zeichen] = 'a'; aktuelles_zeichen--; while(aktuelles_wort[aktuelles_zeichen] == '0' && aktuelles_zeichen >= 0){aktuelles_wort[aktuelles_zeichen] = 'a'; aktuelles_zeichen--;} if(aktuelles_zeichen==0 && aktuelles_wort[aktuelles_zeichen] == '0'){abbruch=true;}//bhjkfgsduf }//von der if(counter ==63) //dann wird das zeichen in dem Wort gespeichert und ausgegeben. aktuelles_wort[aktuelles_zeichen] = alle_zeichen[counter]; cout<< aktuelles_wort << endl; getch();//nur zum testen. Wird wieder entfernt }//von der while(true) getch(); }//von der int main