HOLA!!!
Este tutorial lo arme para explicar como hacer un generador de diccionarios como mi BruteForceDicctionaryCreator o BFDC7913. (http://foro.elhacker.net/programacion_visual_basic/source_brute_force_dictionary_creator_7913-t325748.0.html)
Empecemos...
Suponiendo que tenes esta cadena de posibles caracteres:
Código:
"ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklmnopqrstuvwxyz0123456789"
Es la mas comun y tiene 26+26+10 osea 62 caracteres correcto?
Eso yo recomendaria guardarlo en un Vector (array).
Para eso yo uso la funcion:
Código
Private Function CharSplit7913(expression As String) As String()
Dim lExp As Long
Dim ExpB() As Byte
Dim AuxArr() As String
ExpB = expression
lExp = UBound(ExpB)
ReDim AuxArr(lExp)
For X = 0 To lExp Step 2
AuxArr(X / 2) = ChrW(ExpB(X))
Next
ReDim Preserve AuxArr(Int(lExp / 2))
CharSplit7913 = AuxArr
End Function
El vector resultante suponete que lo llamamos Chars() queda compuesto asi:
Chars(0 to 61) : "A","B","C",...,"7","8","9".
Espero que hasta ahi me sigas.
En este punto solo tenemos en un Vector (array) guardados todos los caracteres que vamos a usar.
Ahora, solicitamos la longitud en este caso la guardaremos en la variable Tam (de tamaño)
Ahora vamos a crear un vector donde guardaremos la cadena actual, su index maximo sera tam-1.
Suponiendo que tam = 3
hacemos asi:
Código
Dim Palabra() as integer
'dentro del proceso de creacion de diccionario
Redim Palabra(Tam-1)
Aca lo que hicimos es hacer que Palabra quedara (0 to 2) inicializandose asi:
Palabra(0 to 2): 0,0,0
aca empieza el proceso de creacion de strings...
Código
Dim AuxPalabra As String
Do
AuxPalabra = 0
For X = 0 To tam - 1
AuxPalabra = AuxPalabra & chars(palabra(X)) ' aca concatenamos todas las letras
Next
Print AuxPalabra ' aca imprimo la palabra resultante.
palabra(0) = palabra(0) + 1 ' aca muevo un caracter
For X = 0 To UBound(palabra) - 1
If palabra(X) = UBound(chars) + 1 Then
'aca verificamos que ninguna casilla quede con un numero mayor a los
'caracteres que hay y si pasa eso aumenta la siguiente casilla
'y la actual se vuelve a 0
palabra(X + 1) = palabra(X + 1) + 1
palabra(X) = 0
End If
'esto de abajo es para ver cuando se termino el proceso
'osea cuando se han hecho todas las combinaciones.
If palabra(UBound(palabra)) = UBound(chars) + 1 Then Exit Do
Next
Loop
Entonces como te quedaria todo el codigo completo...
Código
Dim Diccionario As String
Dim chars() As String
Dim Tam As Integer
Dim Palabra() As Integer
Private Sub Form_Load()
'aca en diccionario pone lo que quieras
Diccionario = "ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklmnopqrstuvwxyz0123456789"
chars = CharSplit7913(Diccionario)
Tam = InputBox("inserte cantidad de caracteres")
ReDim Palabra(Tam - 1)
End Sub
Private Sub InicioDeProceso()
Dim AuxPalabra As String
Do
AuxPalabra = 0
For X = 0 To Tam - 1
AuxPalabra = AuxPalabra & chars(Palabra(X)) ' aca concatenamos todas las letras
Next
Debug.Print AuxPalabra ' aca imprimo la palabra resultante.
Palabra(0) = Palabra(0) + 1 ' aca muevo un caracter
For X = 0 To UBound(Palabra) - 1
If Palabra(X) = UBound(chars) + 1 Then
'aca verificamos que ninguna casilla quede con un numero mayor a los
'caracteres que hay y si pasa eso aumenta la siguiente casilla
'y la actual se vuelve a 0
Palabra(X + 1) = Palabra(X + 1) + 1
Palabra(X) = 0
End If
'esto de abajo es para ver cuando se termino el proceso
'osea cuando se han hecho todas las combinaciones.
If Palabra(UBound(Palabra)) = UBound(chars) + 1 Then Exit Do
Next
Loop
MsgBox "Proceso Terminado"
End Sub
Private Function CharSplit7913(expression As String) As String()
Dim lExp As Long
Dim ExpB() As Byte
Dim AuxArr() As String
ExpB = expression
lExp = UBound(ExpB)
ReDim AuxArr(lExp)
For X = 0 To lExp Step 2
AuxArr(X / 2) = ChrW(ExpB(X))
Next
ReDim Preserve AuxArr(Int(lExp / 2))
CharSplit7913 = AuxArr
End Function
GRACIAS POR LEER!!!