skaterpowa (Normal User)
Newbie
Messaggi: 3
Iscritto: 16/04/2011
|
Salve,
Sto creando un programma che non conoscendo il contenuto della textbox (cioè la password) la deve trovare tramite il login, provando tutte le combinazioni possibili. Il problema è che non so creare il ciclo che prova tutte le combinazioni possibili (numeri, lettere): che sarebbe:
If textbox1.text = "afdvk" then
button1.enabled = true
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Try
textbox1.text = "a"
textbox1.text = "b"
textbox1.text = "c"
'ecc...
textbox1.text = "aa"
textbox2.text = "ab"
'ecc...
textbox1.text = "aaa"
textbox2.text = "aba"
textbox1.text = "aca"
textbox2.text = "ada"
'ecc...
End Sub
Fino a 2 o 3 caratteri almeno... Mi interesserebbe quindi fare ciò, ma invece di mettere ogni volta "textbox1.text = "a", "b", "c"" ecc, sarebbe meglio un ciclo che li racchiude tutti, che però non so fare. Se qualcuno sarebbe disposto ad aiutarmi me ne sarebbe grato.
|
|
HeDo (Founder Member)
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
|
nono, fallo a mano fino a password di lunghezza 32, andrà molto più veloce.
quando hai finito posta il codice.
|
|
()
Newbie
Messaggi:
Iscritto:
|
Postato originariamente da HeDo:
nono, fallo a mano fino a password di lunghezza 32, andrà molto più veloce.
quando hai finito posta il codice. |
il sorgente più lungo della storia
|
|
simoz (Normal User)
Rookie
Messaggi: 21
Iscritto: 10/03/2011
|
Non ho capito che cosa intendi....lo puoi rispiegare meglio
|
|
R0gerBlack (Member)
Expert
Messaggi: 210
Iscritto: 10/06/2010
|
Ti serve un random.. però quello che vuoi fare ha anche un lato insolito di sé..
comunque in pratica nel timer, ogni carattere in base alla lunghezza che ti serve dev'essere generata o una lettera o un numero quindi si potrebbe fare così:
Codice sorgente - presumibilmente VB.NET |
Dim Rand As Integer Dim WriteWord As Char Dim MAX_VALUE As Integer 'Qui metti le lettere della password generata Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim rnd As New Random For I = 1 To MAX_VALUE Rand = rnd.Next(1, 36) If Rand > 26 Then Rand -= 26 WriteWord = Rand Else Select Case Rand Case 1 : WriteWord = "a" Case 2 : WriteWord = "b" Case 3 : WriteWord = "c" Case 4 : WriteWord = "d" Case 5 : WriteWord = "e" Case 6 : WriteWord = "f" Case 7 : WriteWord = "g" Case 8 : WriteWord = "h" Case 9 : WriteWord = "i" Case 10 : WriteWord = "j" Case 11 : WriteWord = "k" Case 12 : WriteWord = "l" Case 13 : WriteWord = "m" Case 14 : WriteWord = "n" Case 15 : WriteWord = "o" Case 16 : WriteWord = "p" Case 17 : WriteWord = "q" Case 18 : WriteWord = "r" Case 19 : WriteWord = "s" Case 20 : WriteWord = "t" Case 21 : WriteWord = "u" Case 22 : WriteWord = "v" Case 23 : WriteWord = "w" Case 24 : WriteWord = "x" Case 25 : WriteWord = "y" Case 26 : WriteWord = "z" End Select End If TextBox1.Text += WriteWord Next End Sub
|
Così fatto la TextBox conterrà la password di lettere tante quanto è il valore MAX_VALUE, ovviamente quando vuoi tu le lettere devono essere resettate altrimenti poi la TextBox accavalla le password..
P.S. Il tuo codice invece la riscrive e basta, questo penso faccia proprio al caso tuo
|
|
skaterpowa (Normal User)
Newbie
Messaggi: 3
Iscritto: 16/04/2011
|
Quindi se faccio così:
Codice sorgente - presumibilmente VB.NET |
Dim Rand As Integer Dim WriteWord As Char Dim MAX_VALUE As Integer 'Qui metti le lettere della password generata Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim rnd As New Random For I = 1 To MAX_VALUE Rand = rnd.Next(1, 36) If Rand > 36 Then Rand -= 36 WriteWord = Rand Else Select Case Rand Case 1 : WriteWord = "a" Case 2 : WriteWord = "b" Case 3 : WriteWord = "c" Case 4 : WriteWord = "d" Case 5 : WriteWord = "e" Case 6 : WriteWord = "f" Case 7 : WriteWord = "g" Case 8 : WriteWord = "h" Case 9 : WriteWord = "i" Case 10 : WriteWord = "j" Case 11 : WriteWord = "k" Case 12 : WriteWord = "l" Case 13 : WriteWord = "m" Case 14 : WriteWord = "n" Case 15 : WriteWord = "o" Case 16 : WriteWord = "p" Case 17 : WriteWord = "q" Case 18 : WriteWord = "r" Case 19 : WriteWord = "s" Case 20 : WriteWord = "t" Case 21 : WriteWord = "u" Case 22 : WriteWord = "v" Case 23 : WriteWord = "w" Case 24 : WriteWord = "x" Case 25 : WriteWord = "y" Case 26 : WriteWord = "z" Case 27 : WriteWord = "1" Case 28 : WriteWord = "2" Case 29 : WriteWord = "3" Case 30 : WriteWord = "4" Case 31 : WriteWord = "5" Case 32 : WriteWord = "6" Case 33 : WriteWord = "7" Case 34 : WriteWord = "8" Case 35 : WriteWord = "9" Case 36 : WriteWord = "0" End Select End If TextBox1.Text += WriteWord Next End Sub
|
Mi prova quindi qualsiasi combinazione senza sapere il contenuto della textbox1, giusto?
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Quello è un algoritmo non deterministico, almeno in linea di principio: potrebbe non provare mai tutte le combinazioni, così come potrebbe trovare la combinazione giusta in meno tempo rispetto a un brute-force. Inoltre, essendo incluso in un timer, la sua frequenza di esecuzione è nettamente inferiore a un ciclo di altro genere. Usate i timer a sproposito...
La soluzione è banale se sapessi usare almeno i costrutti iterativi, che sono tra le nozioni basilari di qualsiasi linguaggio. Nel forum non vieni per chiedere codice, ma per un aiuto su qualcosa che non hai capito. Se prima non fai lo sforzo di imparare, però, è inutile.
http://totemslair.org/guide/viewchapter.php?guida=vb&id=9
E il successivo.
|
|
R0gerBlack (Member)
Expert
Messaggi: 210
Iscritto: 10/06/2010
|
Effettivamente con un ciclo Do Loop si arriverebbe più velocemente, ma il programma sarebbe impallato finché non trova la soluzione.. mentre almeno il timer fa girare intanto il programma..
|
|
HeDo (Founder Member)
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
|
Postato originariamente da R0gerBlack:
Effettivamente con un ciclo Do Loop si arriverebbe più velocemente, ma il programma sarebbe impallato finché non trova la soluzione.. mentre almeno il timer fa girare intanto il programma.. |
quando uno viene da vb6 e non sa nulla di nulla succede questo.
un po di studio e queste sparate random non si farebbero. Ultima modifica effettuata da HeDo il 17/04/2011 alle 18:26 |
|