suche algorithmus
-
hallo, ich suche eine Funktion oder algorithmus, der mir alle möglichen
zusammensetztungen aus zahlen und buchstaben macht,
(bruteforce) wenn a falsch ist dann b c..z. za ...zz
ich hoffe ich verstehe was gemeint ist. mich würde nur mal interessieren wie das geht und nen selbsttest an nem eigenen programm durchführen.
Danke
-
NEDD1j schrieb:
hallo, ich suche eine Funktion oder algorithmus, der mir alle möglichen
zusammensetztungen aus zahlen und buchstaben macht,
(bruteforce) wenn a falsch ist dann b c..z. za ...zz
ich hoffe ich verstehe was gemeint ist. mich würde nur mal interessieren wie das geht und nen selbsttest an nem eigenen programm durchführen.
DankeWie wärs mit selbst programmieren?
-
Habe nicht so recht verstanden, was du suchst. Aber könnte vielleicht dies zutreffen?
http://www.cplusplus.com/reference/algorithm/next_permutation.html
http://www.cplusplus.com/reference/algorithm/prev_permutation.htmlGrüssli
-
#include <string.h> #include <stdlib.h> #include <stdio.h> #include <math.h> const char key_table[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', }; int main( int argc, char** argv ) { char* cpStr = NULL; unsigned int n = 0, m = 26, j = 0, k = 0; unsigned long long int l = 0, c = 0; if( argc != 2 ) { return 0; } n = atoi(argv[1]); l = pow( m, n ); if( n < 1 ) { return 0; } cpStr = malloc( n+1 ); memset( cpStr, key_table[0], n ); cpStr[n] = '\0'; hasheriz0r: for( j = (n-1); j>=0; j-- ) { if( j == (n-1) ) { for( k = 0; k < m; k++ ) { cpStr[j]=key_table[k]; c++; } } else if( cpStr[j] != key_table[m-1] && cpStr[j+1] == key_table[m-1] ) { cpStr[j+1] = key_table[0]; cpStr[j]++; goto hasheriz0r; } if( c == l ) { break; } } printf( "Runs:\t%I64d\nShould:\t%I64d\n", c, l ); free( cpStr ); getchar(); return 0; }
Geht mit Sicherheit noch sehr viel eleganter..
-
feraL schrieb:
Geht mit Sicherheit noch sehr viel eleganter..
In C++ auf jeden Fall.
-
Mir wäre lieber, wenn jemand den Algo erklären könnte. Der Algo von feraL macht irgendwie überhaupt gar keinen Sinn. Wenn man zum Beispiel n = 1 einsetzt oder n = 2 dann kommen da Ergebnisse raus ... Und der Code, welcher ausgeführt wird ...
1. Kein C++
2. Das goto könnte man einfach mit einemj = (n-1)
ersetzen. Finger weg von gotos!
3. Grässliche Variablenbenennung. Vielleicht verstehe ich den Algo schon nur deshalb nicht.
4. Diese Schleife macht für mich überhaupt keinen Sinn (53 - 57):for( k = 0; k < m; k++ ) { cpStr[j]=key_table[k]; c++; }
Das könnte man gleich als das folgende schreiben:
cpStr[j] = key_table[m - 1]; c += m;
5. Die Variable n wird zu spät auf Korrektheit geprüft:
n = atoi(argv[1]); // <- Das ist ganz klar C! if( n < 1 ) { return 0; // Fehlermeldung? } l = pow( m, n ); // Nach der Überprüfung sollte sowas ausgeführt werden.
6. Nirgends Fehlermeldungen, deshalb weiss ich auch jetzt noch nicht, was man als n eigentlich zu übergeben hat.
7. Am besten diesen Code gar nicht erst benutzen ... schon nur, weil es kein C++ istGrüssli
-
rekursiv statt goto
-
Was du suchst ist John the Ripper, das ist auch open source, wenn du wirklich am Algorithmus und weniger am Cracken eines Passworts interessiert bist.