Aiuto programma in C :)

Pubblicità

Alby_x188

Utente Attivo
Messaggi
22
Reazioni
0
Punteggio
25
Salve raga del forum. E' da un po di tempo che vorrei scrivere un programma in C che, dato in input una stringa (numeri, lettere, maiuscole/minuscole, simboli...) il programma calcoli tutte le possibili combinazioni di simboli fin quando trova quelli digitata in input. Qualcuno potrebbe spiegarmi come fare? Niente codice già fatto, di quelli ne trovo a bizzeffe sul web. Bensì vorrei capire l'algoritmo, il ragionamento. Sul web molti consigliano dei cicli FOR nidificati, ma ancora non ne ho capito l'utilità. Postate, per piacere, guide, suggerimenti, consigli e quant'altro. Grazie :))
 
Per aiutarti occorre capire bene quello che vuoi.

Praticamente una specie di simulatore di password cracker ?
Dico simulatore perche', dovendo inserire la stringa, il programma non avrebbe bisogno di una ricerca del genere.

Spiegati meglio...
 
Vorrei fare un programma che provi tutte le permutazioni possibili di S simboli (mettero alfabeto, maiuscole/minuscole, simboli, numeri) finché non trova quelli inserito all'inizio in input. Mi puoi aiutare?
 
Chiamerò "parole" le combinazioni di caratteri e "alfabeto" l'insieme dei simbolie caratteri da usare.
Il tuo algoritmo deve costruire tutte le parole possibili fino ad ottenere una parola uguale a quella inserita?
A priori sai già la lunghezza della parola da trovare o devi partire a provare le parole di lunghezza 1?
Esempio: la parola inserita è "ciao", e usi le sole lettere minuscole, parti da 'a' o da 'aaaa'?
Una volta chiarito questo punto puoi pensare a un approccio "a orologio", a ogni iterazione (a ogni test) modifichi l'ultimo carattere, una volta che arrivi all'ultimo simbolo dell'alfabeto, passi al simbolo successivo del penultimo carattere della parola e ripeti l'intero ciclo. Quando avrai permutato tutti i penultimi simboli, modifichi il terzultimo e ripeti l'intero processo per gli ultimi due simboli.
Non so se non stato chiaro, comunque pensa a come funziona un orologio a lancette o anche a uno digitale: l'ultima cifra (la seconda cifra dei secondi) cambia sempre ad ogni secondo, ogni volta che passa per zero, la prima cifra dei secondi sale di uno. E la prima cifra dei secondi, al posto di saltare a 6, torna a zero e fa scattare la seconda cifra dei minuti. E così via, il concetto è lo stesso.
Per implementarlo potresti usare un array contenente l'alfabeto da usare e dei puntatori che scorrono sull'array, i puntatori saranno i singoli simboli.
 
Devo dissentire, Signore del Tempo. Il fattoriale vale per tutte le combinazioni senza ripetizione del simbolo. Se volessi trovare la stringa ACAB, dove la A si ripete, il fattoriale X! non basta
 
dati 3 elementi a, b, c come alfabeto. Combinazioni totali:

abc
acb
bca
bac
cab
cba

In tot. sono 6 combinazioni, ovvero 3!=6, come dici tu. Ma, se volessi trovare la stringa "aab", dove la "a" si ripete, questa non rientra nella formula. Non so se mi sono spiegato bene...
 
Il numero di n-sequenze di k-elementi con ripetizioni è k^n.
Per cui il numero di parole di 5 simboli presi da un alfabeto di 26 simboli (caratteri alfabeto minuscolo) è 26^5, che è un numero molto grande. Non a caso il bruteforce come tecnica di hacking, oltre ad essere la più banale è anche la più pesante.
Comunque ti sei fatto una idea dell'algoritmo?
 
Un'idea si, ma metterla in pratica non sarà facile. Sto incominciando a disegnare un diagramma a blocchi per capirlo meglio
 
Ti consiglio di analizzare bene come tu eseguiresti questa operazione. Ad esempio quando hai postato le possibilità di abc.
Poi utilizzi la rappresentazione che preferisci.
 
Pubblicità
Pubblicità
Indietro
Top