Seite 2 von 2
Verfasst: 04.06.2006 19:43
von sen-me
Jo, der benutzt kein Wörterbuch, der baut auch seine Wörter so...
Allerdings war das Prog auch ein MD5 Hash Cracker ^^
Das heist das Programm (man gibt ein MD5 Hash an) durchgeht jeden Buchstaben für Buchstaben bis der Hash übereinstimmt und gibt den String zurück...
Und das macht er ziemlich schnell, keine Ahnung wie das Prog das macht
Aba egal, ich will ja kein MD5 Hash Cracker baun sondern sowas wien Wörterbuch, also muss ich wohl die Geschwindichkeit hinnehmen ^^
Verfasst: 04.06.2006 19:47
von ullmann
Vielleicht werden in solchen Programmen fertige Silben in Tabellen eingelesen und wenn Wörter zu erzeugen sind, werden dann ganz fix einige Silben kombiniert, z.B. für Länge=4: Silbe "a" (Länge 1) mit Silbe "lex" (Länge 3).
Rainer
Verfasst: 04.06.2006 19:47
von Kiffi
> sondern sowas wien Wörterbuch, also muss ich wohl die Geschwindichkeit
> hinnehmen ^^
und wer legt fest, welches Wort in dieser generierten Buchstabensuppe
sinnvoll ist und welches nicht? Ein Wörterbuch sollte ja nur Einträge enthalten,
die es im 'normalen' Leben wirklich gibt.
Grüße ... Kiffi
Verfasst: 04.06.2006 19:53
von ullmann
Sorry, Problemstellung "sinnvoll" hatte ich überlesen, dann gehts natürlich nicht mit Silbenkombination.
Rainer
Verfasst: 04.06.2006 19:55
von Ja!
Hmm, das hat mich jetzt interessiert.
Bei mir braucht folgendes Programm genau 313
ms bis es "alex" hat!
Code: Alles auswählen
DisableDebugger
string.s
size=4
Dim z.l(size)
;ASCII 97 bis 122 ist "a" bis "z"
For i = 1 To size : z(i)=97 : Next ;Alle mit "a" initialisieren
startzeit=ElapsedMilliseconds()
For i = 1 To Int(Pow(26, size));So Viele Kombinat. insges. möglich
For a = 1 To size
If z(a) = 123 : z(a) = 97 : z(a+1)+1 : EndIf
Next
string="": For b = 1 To size : string+Chr(z(b)): Next
If string = "alex"
stopzeit=ElapsedMilliseconds()
MessageRequester("",string+Chr(13)+"Zeit: "+Str(stopzeit-startzeit)+"ms")
End
EndIf
z(1)+1
Next
Verfasst: 04.06.2006 19:58
von Kaeru Gaman
also, ich hab mal was ausprobiert:
Code: Alles auswählen
Dim a(50)
For n=0 To 50 : a(n) = 97 : Next
in$ = InputRequester("Worder", "Länge eingeben", "3")
Len = Val(in$)
def$ = Space(Len)
Len -1
CreateFile(0, "output.txt")
timer1 = ElapsedMilliseconds()
Repeat
w$ = def$
For z=0 To Len : PokeB(@w$+z, a(z)):Next
WriteStringN(w$)
dig = 0
go = 1
Repeat
a(dig)+1
If a(dig) > 122
a(dig) = 97
dig +1
Else
go = 0
EndIf
Until go = 0
Until dig > Len
timer = ElapsedMilliseconds() -timer1
MessageRequester("Worder", "Laufzeit:"+Chr(13)+Chr(10)+"Zeichen:"+Str(Len+1)+Chr(13)+Chr(10)+"Dauer:"+Str(timer) )
CloseFile(0)
also, der braucht für 5 zeichen 33.5 sekunden, weil er ne datei schreibt und keinen debugger nimmt.
für 4 zeichen braucht er 1.2 sec, also weniger als die 5.5 für "alex", wie auch immer du das meintest...
funktionieren tut das folgendermaßen:
die buchstaben werden wie stellen einer zahl zur basis 26 behandelt
wenn die niedrigste stelle übers z geht, wird sie wieder auf a gesetzt und die nächste ein höher, usw.
das könnte man in ASM noch dahingehend optimieren, dass man direkt im stringspeicher zählt.
(das was ich hier jetzt im array mache)
aber hunderttausende von permutationen brauchen nun mal ihre zeit.
also, damit alle 13stelligen wörten hinschreiben, dann koch dir ma nen kaffe....
Verfasst: 04.06.2006 20:24
von Ja!
Jetzt ist es noch etwas schneller (und schöner),
203-219ms bis "alex" gefunden.
(Geht bestimmt noch schneller...)
Code: Alles auswählen
DisableDebugger
string.s
size = 4
kombi = Int(Pow(26, size))
Dim z.l(size)
For i = 1 To size : z(i)=97 : Next
startzeit=ElapsedMilliseconds()
For i = 1 To kombi
string=""
For a = 1 To size
If z(a) = 123 : z(a) = 97 : z(a+1)+1 : EndIf
string+Chr(z(a))
Next
z(1)+1
If string = "alex"
stopzeit=ElapsedMilliseconds()
MessageRequester("",string+Chr(13)+"Zeit: "+Str(stopzeit-startzeit)+"ms")
End
EndIf
Next
Verfasst: 04.06.2006 21:06
von HeX0R
Ja! hat geschrieben:Jetzt ist es noch etwas schneller (und schöner),
203-219ms bis "alex" gefunden.
(Geht bestimmt noch schneller...)
Jo, 16ms und flexibler:
Code: Alles auswählen
#Size = 4
#SearchFor = "alex"
#StartSearch = 'a'
#EndSearch = 'z'
Dim L.b(#Size)
For i = 0 To #Size
L(i) = #StartSearch
Next i
S = #Size - 1
Startzeit = ElapsedMilliseconds()
Found = #True
Repeat
If PeekS(@L(0), #Size) = #SearchFor
Break
EndIf
For j = 0 To S
L(j) + 1
If L(j) <> #EndSearch
Break
Else
L(j) = #StartSearch
If j = S
Found = #False
Break 2
EndIf
EndIf
Next j
ForEver
Stopzeit = ElapsedMilliseconds()
If Found
MessageRequester("", #SearchFor + #LF$ + "Zeit: " + Str(stopzeit - startzeit) + "ms")
Else
MessageRequester("Error", #SearchFor + " not found!")
EndIf
Verfasst: 04.06.2006 21:39
von sen-me
Lol langsam blick ich nimmer durch, sagt bescheid wenn ihr bei asemmbler angekommen seit ^^
Achja, bei mir dauerts 31ms ^^
ihr müsst aba bedneken das das crack tool auch noch den md5 gesucht hat, das wird wohl etwas bremsen, deswegen kann ich mir nich vorstellen, das dies die shcnellste lösung war ^^
Verfasst: 04.06.2006 21:52
von Ja!
@HeXOR
Vorhin wollte ich extra noch dazuschreiben, daß da so ein PEEK-Freak
ran muss, um das richtig schnell zu machen
