Avatar billede marvind Nybegynder
13. februar 2008 - 22:52 Der er 25 kommentarer og
1 løsning

Brute forcer algoritme

hej eksperter.
jeg prøver på at lave en brute forcer, jeg vil hav en tekst streng til at ændre sig sådan:
a > b > c - z
aa > ab > ac
ba > bb > ba
osv.
er der nogen der kan hjælpe med at lave en sådan algoritme(det tror jeg det hedder)

jeg tænkte på noget i retningen af:
do
streng = chr(index)
index = index + 1
loop

den skal "køre igennem" store bogstaver, små bogstaver og tal
Avatar billede arne_v Ekspert
13. februar 2008 - 23:10 #1
Til inspiration:

Option Explicit
Option Strict

Imports System

Module Main
    Sub Perm(ca() As Char, ix As Integer)
        If ix < ca.Length - 1 Then
            Dim i As Integer
            For i = 0 to 25
                ca(ix) = Convert.ToChar(97 + i)
                Perm(ca, ix + 1)
            Next
        Else
            Console.WriteLine(New string(ca))
        End If
    End Sub
    Sub Perm(n As Integer)
        Dim i As Integer
        For i = 1 To n
            Dim ca(i) As Char
            Perm(ca, 0)
        Next
    End Sub
    Sub Main()
        Perm(2)
    End Sub
End Module
Avatar billede marvind Nybegynder
13. februar 2008 - 23:18 #2
arne v >> hvad gør den kode?

det skal lige siges at brute forceren skal bruges til et project på htx og ikke til hacking/cracking
Avatar billede arne_v Ekspert
14. februar 2008 - 00:07 #3
Du kunne jo prøve og køre den !

:-)

Den udskriver alle 1 og 2 bogstavs kombinationer af a-z.
Avatar billede marvind Nybegynder
14. februar 2008 - 10:33 #4
hvordan bruger jeg koden? jeg har puttet den i et module. men hvordan får jeg et output fra det? F.eks til en textbox
Avatar billede marvind Nybegynder
14. februar 2008 - 12:35 #5
Btw hvordan får jeg koden til at fortsætte med at lave kombinationer? dvs flere end 2 cifre, F.eks hvis jeg gerne vil have den til at lave 10 (aaaaaaaaaa > aaaaaaaaab) osv
Avatar billede gammelhat Nybegynder
14. februar 2008 - 12:36 #6
hvor vil du gøre af alle de kombinationer?
Avatar billede marvind Nybegynder
14. februar 2008 - 12:39 #7
jeg skal kun bruge en af gangen, de skal skrives i et textarea(multiline textbox)
på hver sin linie. jeg vil gerne have en variablel til at indeholde først a derefter b osv.
Avatar billede arne_v Ekspert
14. februar 2008 - 13:27 #8
hvis du erstatter

Perm(2)

med

Perm(10)

vil den lave alle kombo med 1-10 tegn.

NB: den vil også tage noget tid at køre !
Avatar billede arne_v Ekspert
14. februar 2008 - 13:29 #9
Hvis du erstatter:

Console.WriteLine(New string(ca))

med:

ta.Text += (New string(ca) + Environment.NewLine)

så fylder den i ta (men det skal du ikke gøre med 1-10 kombinationer !!)
Avatar billede pidgeot Nybegynder
14. februar 2008 - 13:47 #10
Til reference: 1-10 tegn (med det tegnsæt du nævner) giver 146.813.779.479.510 forskellige kombinationer - heraf er 141.167.095.653.376 af dem på 10 tegn, mens resten er 1-9. Hvis vi går ud fra at du kan generere 1 million kombinationer i sekundet (for nu lige at have et nemt tal at arbejde med), vil det tage dig ca. 4 år og 8 måneder at løbe dem igennem.

En god benchmark ville være at prøve med 1-6 tegn, der "kun" er 321.272.406 kombinationer - gang antallet af sekunder det tager at løbe dem igennem med 5 dage og 7 timer, så har du et meget godt estimat af hvor lang tid 1-10 tegn vil tage.

Mht. tekstboks, vil den nok allerede dø når den er igang med 6 tegn.

*går igen*
Avatar billede marvind Nybegynder
14. februar 2008 - 14:16 #11
jeg ved godt det vil tage MEGET lang tid, men jeg har ikke andre måder at gøre det på...
Avatar billede marvind Nybegynder
14. februar 2008 - 16:16 #12
jeg kan stadig ikke hitte ud af at få "ta" frem i en textbox, "name 'ta' is not declared."
Avatar billede arne_v Ekspert
14. februar 2008 - 16:25 #13
ta er TextBox variablen
Avatar billede marvind Nybegynder
14. februar 2008 - 16:30 #14
skal jeg ikke putte koden i et modul? (højre-klik i solution explorer > add > module)
jeg har prøvet sta skrive textbox1.text = ta men får bare "name 'ta' is not declared."
Avatar billede arne_v Ekspert
15. februar 2008 - 04:29 #15
Nej.

Hvis du vil have det i din win form, så bare put det i den kode.

Hvis din TextBox hedder textbox1, så er det:

textbox1.Text += (New string(ca) + Environment.NewLine)
Avatar billede marvind Nybegynder
15. februar 2008 - 09:39 #16
sådan?:
Option Explicit On
Option Strict On

Imports System
Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "
Module Main
        Sub Perm(ByVal ca() As Char, ByVal ix As Integer)
            If ix < ca.Length - 1 Then
                Dim i As Integer
                For i = 0 To 25
                    ca(ix) = Convert.ToChar(97 + i)
                    Perm(ca, ix + 1)
                Next
            Else
                ta.Text += (New String(ca) + Environment.NewLine)
            End If
        End Sub
        Sub Perm(ByVal n As Integer)
            Dim i As Integer
            For i = 1 To n
                Dim ca(i) As Char
                Perm(ca, 0)
            Next
        End Sub
        Sub Main()
            Perm(2)
        End Sub
    End Module
End Class

det giver mig "module statements can occur only at file or namespace level."
undskyld jeg spørger så meget, men jeg bruger ikke visual basic ret meget
Avatar billede marvind Nybegynder
17. februar 2008 - 10:17 #17
hallo? er der nogen?
Avatar billede arne_v Ekspert
17. februar 2008 - 16:42 #18
Som fejlen siger, så kan du ikke have et module inden i en class.

module ud

du skal bruge de to perm sub'er

indholdet af main skal vel flyttes til en button click event
Avatar billede marvind Nybegynder
18. februar 2008 - 16:26 #19
nu har jeg:
Public Class Form1

    Private Sub cmdnext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdnext.Click
        Perm(2)
    End Sub
-------------------------------------------------------------------------

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
-------------------------------------------------------------------------

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Perm(2)
    End Sub
-------------------------------------------------------------------------

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Timer1.Start()
    End Sub
-------------------------------------------------------------------------

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Timer1.Stop()
    End Sub
-------------------------------------------------------------------------

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Perm(2)
    End Sub
-------------------------------------------------------------------------

    Sub Perm(ByVal ca() As Char, ByVal ix As Integer)
        If ix < ca.Length - 1 Then
            Dim i As Integer
            For i = 0 To 25
                ca(ix) = Convert.ToChar(97 + i)
                Perm(ca, ix + 1)
            Next
        Else
            txtmain.Text += (New String(ca) + Environment.NewLine)
        End If
    End Sub
-------------------------------------------------------------------------

    Sub Perm(ByVal n As Integer)
        Dim i As Integer
        For i = 1 To n
            Dim ca(i) As Char
            Perm(ca, 0)
        Next
    End Sub
End Class
-------------------------------------------------------------------------

jeg får ingen fejl, men den skriver "abcdefghijklmnopqrstuvwxyzaaabacadaeafagahai......" på en gang,
istedet for at gå et trin videre når jeg trykker?
Avatar billede marvind Nybegynder
20. februar 2008 - 22:58 #20
er der nogen der kan forklare mig hvordan den kode "genererene" del af koden viker?

og selvfølgelig hjælpe med fejlen i min sidste post
Avatar billede arne_v Ekspert
22. februar 2008 - 04:10 #21
Det lyder som om din text box ikke er multi line !
Avatar billede arne_v Ekspert
22. februar 2008 - 04:12 #22
Algoritmen er en lige ud af landevejen rekursiv algoritme.

Man skal lige være opmærksom på at:

Convert.ToChar(97 + i)

returnerer 'a' til 'z' fordi 'a' har kode 97 !
Avatar billede marvind Nybegynder
22. februar 2008 - 14:11 #23
Ahh, det er den ikke, jeg mente at jeg ville have dem til at komme frem en af gangen i en single-line textbox når jeg klikkede på knappen.
det med multiline textbox er noget helt andet, det kan jeg godt selv klare :D,

undskyld jeg forklarer det så dårligt :/
Avatar billede marvind Nybegynder
22. februar 2008 - 14:35 #24
kan jeg få den til at stated ved F.eks 3(aaa > aab) og bare hoppe de andre over?
Avatar billede arne_v Ekspert
24. februar 2008 - 00:58 #25
Sub Perm(ByVal n As Integer)
        Dim i As Integer
        For i = 3 To n
            Dim ca(i) As Char
            Perm(ca, 0)
        Next
    End Sub
Avatar billede arne_v Ekspert
24. februar 2008 - 00:58 #26
Og et svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester