Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Ottenere tutte le combinazioni possibili con x stringhe
Forum - C/C++ - Ottenere tutte le combinazioni possibili con x stringhe

Avatar
an0n1m0 (Normal User)
Newbie


Messaggi: 6
Iscritto: 30/12/2008

Segnala al moderatore
Postato alle 18:43
Domenica, 01/05/2011
Salve a tutti, stavo cercando di ottenere, dando in input ad esempio
Codice sorgente - presumibilmente Plain Text

  1. prova1, prova2, prova3

, un programma che fosse capace di restituirmi tutte le combinazioni possibili (prova2prova1, prova1prova2, prova3prova1 ecc...)...ho cercato qualcosa di già pronto ma non ho trovato nulla...mi servirebbe l'output per un bruteforce tramite dizionario poichè ricordo le parole all'interno di una mia password ma non l'ordine :-)
Qualcuno ha per caso del codice per fare ciò, oppure in alternativa conosce un programma/sorgente valido?

PM
Avatar
crybot (Normal User)
Rookie


Messaggi: 43
Iscritto: 11/04/2011

Up
1
Down
V
Segnala al moderatore
Postato alle 19:27
Domenica, 01/05/2011
non e` affatto difficile trovare le combinazioni di soli 3 dati o_O

in ogni caso ti posto il codice di un semplice algoritmo scritto sul momento che scrive su schermo tutte le combinazioni possibili con i dati definiti dall'utente:

Codice sorgente - presumibilmente C#

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6.         const int MAX = 6; // cambia questo numero in base ai dati che hai a disposizione
  7.         int dato[MAX];
  8.         int i;
  9.         int k;
  10.  
  11.         for (int s=0; s<MAX; s++)
  12.         {
  13.                 cin >> dato[s];
  14.         }
  15.  
  16.         for (i=0; i<MAX; i++)
  17.         {
  18.                 for (k=0; k<MAX; k++)
  19.                 {
  20.                         cout << dato[i] << dato[k] << endl;
  21.                 }
  22.         }
  23.  
  24.         system("pause");
  25.         return 0;
  26.  
  27. }



in ogni caso, non ti servira` a molto se ti serve a quello a cui sto pensando. una volta trovate tutte le combinazioni dovresti fare tutto a mano e non sarebbe molto efficente.

Ultima modifica effettuata da crybot il 01/05/2011 alle 20:07
puoi anche ricorrere ad un ciclo per leggere l'input di piu` dati, es: - crybot - 01/05/11 19:30
do /.../ while(...) - crybot - 01/05/11 19:31
post editato, quindi ignorare i commenti :) - crybot - 01/05/11 20:02
innanzi tutto grazie...comunque il problema è che non sono solo in combinazione di due, ma di tutte le parole che do in input...che sono circa 4 (su una ho il dubbio)... - an0n1m0 - 01/05/11 20:07
allora quello che circa si chiama permutatore, e se non erro ne avevo postato uno qualcuno, usa il tasto cerca - crybot - 01/05/11 20:37
*cerchi - crybot - 01/05/11 20:37
*aveva oddio scusate per gli errori, ma ho la tastiera nuova :( - crybot - 01/05/11 20:38
PM
Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Up
1
Down
V
Segnala al moderatore
Postato alle 20:18
Domenica, 01/05/2011
Questo qua è un semplice programma che ho fatto.
Dato in input un file testo con un carattere per riga
restituisce un file testo con tutte le permutazioni possibili di lunghezza variabile data in input da console
Codice sorgente - presumibilmente C#

  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4.  
  5. char caratteri[10000];
  6. int  numero_caratteri = 0;
  7. int  lunghezza = 0;
  8.  
  9. ofstream fout("permutazioni.txt");
  10.  
  11. void CaricaCaratteri(char testo[]){
  12.         ifstream fin(testo);
  13.         while(!fin.eof()){
  14.                 fin>>caratteri[numero_caratteri];
  15.                 numero_caratteri++;    
  16.         }
  17.         numero_caratteri--;
  18.         fin.close();
  19. }
  20.  
  21. void Calcola(char attuale[] , int lunghezza_attuale){
  22.         if(lunghezza_attuale>=lunghezza-1){//Se c'è solo un carattere da aggiungere
  23.                 for(int i=0; i<numero_caratteri; i++){//Per tutti i caratteri
  24.                                 for(int j=1; j<=lunghezza_attuale; j++){
  25.                                         fout<<attuale[j];
  26.                                 }
  27.                                 fout<<caratteri[i]<<endl;
  28.                 }
  29.         }else{//altrimenti se ce ne sono almeno due da aggiungereù
  30.                 for(int i=0; i<numero_caratteri; i++){//Per tutti i caratteri
  31.                         char attuale2[10000];
  32.                         //Ricopio i vettori in altri due per evitare il problema del passaggio di parametri per indirizzo
  33.                         for(int j=0; j<=lunghezza_attuale; j++) attuale2[j]=attuale[j];
  34.                         //Aggiorno situazione
  35.                         attuale2[lunghezza_attuale+1]=caratteri[i];
  36.                         //Mi richiamo
  37.                         Calcola(attuale2,lunghezza_attuale+1);
  38.                 }      
  39.         }      
  40. }
  41.  
  42.  
  43.  
  44. int main(int argc , char *argv[]){
  45.         CaricaCaratteri(argv[1]);
  46.         cout<<"Di quanto vuoi che sia lunga la sequenza?"<<endl;
  47.         cin>>lunghezza;
  48.        
  49.         char a[10000];
  50.         Calcola(a,0);
  51.         fout.close();
  52.         return 0;
  53. }


Dimenticavo di dire che basta modificare l'array in modo che sia fatto di stringhe e non di caratter! E poi stai attento che riutilizza anche gli stessi caratteri, ad esempio può uscirti prova1prova1prova2 , per aggiustarlo basta aggiungere nei parametri un vettore di bool che indica quali caratteri - XBarboX - 01/05/11 20:27
...sono già stati aggiunti - XBarboX - 01/05/11 20:27
PM
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 17:01
Lunedì, 02/05/2011
http://www.openwall.com/john/doc/OPTIONS.shtml

john --wordlist=file_con_le_parole.txt --rules --stdout

devi editare il file john.conf inserendo manualmente tutte le regole di generazione per le password. http://www.openwall.com/john/doc/RULES.shtml

PM