Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Brute Force...
Philipp_Reitter - Sa 11.08.07 20:14
Titel: Brute Force...
Hi...
ich würde gerne so einen algo schreiben der Brute Force macht...
also ihr wisst schon alle moglichkeiten ausprobieren die man mit einen charset machen kann
es is a nix zum hacken oder cracken sondern was mathematisches was in unserer mathestunde aufgekommen ist..
ich hab schon ein bisschen probiert aber mit den dynamischen längen haut das bei mir nicht hin... ich mein ich kann 2 schleifen machen udn dann bekomm ich alle möglichen
von 00 bis 99 aber wenn ich dann sag mit 15 stellen will ich ned 15 schleifen einbauen... ^^
kann mir da jemand weiterhelfen?
mfg
PHilipp
BenBE - Sa 11.08.07 21:40
Bitte nutze die FoSuFu und füttere sie mit Kombination, Variation oder Permutation ;-)
Sollte dich deinem Ziel näher bringen :P
klezmor - So 12.08.07 01:34
Insgesamt gibt es ja (Anzahl der Buchstaben=x)^(Ziffernlänge=b) viele Kombinationen. Man muss also entweder b+1 forschleifen implementieren oder deren Grenzen auf über x erhöhen.
Stimmt das so, ne andere möglichkeit gibts ja eigentlich net oder?
Ach keine Ahnung :)
Chryzler - So 12.08.07 09:31
Ohne jetzt lange überlegt zu haben, ich würde da irgendwie ne rekursive Funktion einbauen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function BruteForce(s: String; l: Integer): String; var i: Integer; t: String; begin for i := 97 to 122 do begin t := S + Chr(i); if Length(S) < l then t := BruteForce(t, l); ShowMessage(t); end; end; |
So in etwa sollte es gehen, habs aber nicht ausprobiert. Aufruf erfolgt dann so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var s: String; begin s := ''; BruteForce(s, 3); end; |
Philipp_Reitter - So 12.08.07 10:43
hey cool...
danke!
klezmor - So 12.08.07 13:18
Ist das jetzt eigentlich speicherfressend, da ja immer neuer speicherplatz reserviert wird oder? Man könnte doch auch einfach ein eigenes Zahlensystem definieren mit der Basis 26 und dann ganz einfach nach oben zählen oder?
Chryzler - So 12.08.07 14:33
klezmor hat folgendes geschrieben: |
Ist das jetzt eigentlich speicherfressend, da ja immer neuer speicherplatz reserviert wird oder? Man könnte doch auch einfach ein eigenes Zahlensystem definieren mit der Basis 26 und dann ganz einfach nach oben zählen oder? |
Wüsste nicht was da Speicher fressen sollte. Ich denke so ist es auf jeden Fall einfacher und bestimmt schneller, als ein neues Zahlensystem zu erfinden. Denk ich mal. :gruebel:
BenBE - So 12.08.07 14:36
@Chryzler: Mal abgesehen davon, dass Du uninitialisierte Strings zurückgibst ...
Chryzler - So 12.08.07 15:01
BenBE hat folgendes geschrieben: |
@Chryzler: Mal abgesehen davon, dass Du uninitialisierte Strings zurückgibst ... |
Ich hab auch nie behauptet dass dieser Code auch nur annähernd funktioniert.. :motz:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| type TWorkProc = procedure(s: String);
implementation
procedure BruteForce(charset: array of Char; l: Integer; p: TWorkProc); procedure BruteForceRecursive(s: String); var i: Integer; t: String; begin for i := 0 to High(charset) do begin t := S + charset[i]; if Length(S) < l - 1 then BruteForceRecursive(t) else p(t); end; end; var s: String; begin s := ''; BruteForceRecursive(s); end; |
Habs mal noch ein bisschen verbessert/verschlechtert, je nachdem wie man's sieht. :?
BenBE - So 12.08.07 15:10
Chryzler hat folgendes geschrieben: |
BenBE hat folgendes geschrieben: | @Chryzler: Mal abgesehen davon, dass Du uninitialisierte Strings zurückgibst ... |
Ich hab auch nie behauptet dass dieser Code auch nur annähernd funktioniert.. :motz:
[...]
Habs mal noch ein bisschen verbessert/verschlechtert, je nachdem wie man's sieht. :? |
Schreib in Zeile 12 mal anstatt
0 ein
Low(Charset) hin, da ich sonst deine Routine so hier aufrufe:
Delphi-Quelltext
1: 2: 3:
| const CharsetData : array[97..122] of char = 'abcdefghijklmnopqrstuvwxyz';
BruteForce(CharsetData, 3, @p); |
und mich dann über den Range Check Error in Zeile 14 beschwere ;-)
Zum Hintergrund: Open Array Parameter (die Du hier verwendest) nehmen jegliche Arrays an (auch statische). Und statische Arrays können jegliche Basis-Indizes haben (auch 97 und sonst was) ;-)
Chryzler - So 12.08.07 15:29
Wollt ich machen, habs aber dann gelassen, da ich dachte, dynamische Arrays fangen immer bei 0 an (stand glaub in der Delphi-Hilfe), und
array of Char ist ja ein dynamisches Array.
Edit:
BenBE hat folgendes geschrieben: |
Open Array Parameter (die Du hier verwendest) nehmen jegliche Arrays an (auch statische). |
Aso. :P
klezmor - So 12.08.07 19:57
Kanns denn nicht bei langen wörtern zu nem stackoverflow kommen?
BenBE - So 12.08.07 20:06
Dazu müsstest Du Wörter um die 1-2KB (ggf. auch länger) nehmen ... Der Berechnungsaufwand dafür wäre aber enorm ;-)
Theoretisch aber: JA, kann es ;-)
Chryzler - So 12.08.07 20:09
klezmor hat folgendes geschrieben: |
Kanns denn nicht bei langen wörtern zu nem stackoverflow kommen? |
Natürlich. :) Bei Wörtern länger als 21400 Zeichen kann es zu Problemen kommen (an der Stelle wars bei mir). D.h. man kann damit problemlos eine ~ 171 KBit Verschlüsselung bruteforcen. :)
EDIT: Und wieder zu spät..
cuejo - So 12.08.07 21:46
Hi
Philipp_Reitter. Mich würd mal brennend interessieren um welches mathematische Problem es sich dabei handelt. :roll: :wink:
Philipp_Reitter - Do 23.08.07 10:36
also...
normale mathestunde
dann is einer aud die frage gekommen wie viele möglichkeiten man mit 4 stellen (im 10er system machen kann)... blöde frage 9999 natürlich!
dann hat da lehere noch gefrat wie es dann mim ABC is... natürlich keiner gewusst (auch ned wie mans ausrechnet)
dann hat mein nachtbar gesagt schreib dooch'n programm dann da leherer: "Gut Philipp schreib ein proigramm nächste stunde sind wir eh im EDV raum..."
jo so is passiert... nix hochmathematisches aber gut um die mathe stunde zu verkürtzen ^^
Mfg
Philipp
Gausi - Do 23.08.07 10:52
Philipp_Reitter hat folgendes geschrieben: |
dann is einer aud die frage gekommen wie viele möglichkeiten man mit 4 stellen (im 10er system machen kann)... blöde frage 9999 natürlich! |
Typischer Fall von blöde Frage - blöde Antwort. Die richtige Antwort wäre 10.000.
Wenn es nur um die Anzahl geht: x^n. Dabei ist x die Anzahl der Zeichen, n die Anzahl der Stellen.
Philipp_Reitter - Do 23.08.07 11:57
stimmt 0000 ist ja auch ne kombo...
naja bei uns hat eine mal im musik gefragt was saich musik eigentlich bringt
darauf hin aht die lehrerin irgenwelche tabletten geschlukt weil die volle ausgerasted ist ^^
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!