![]() |
Brute Force Algorithmus
Hi ihrs!
Hab hier mal einen Code von ![]() Aber vielleicht kennt jemand von euch einen Algorithmus der schneller arbeitet?!?
Delphi-Quellcode:
function BruteForce(Nb: integer): string;
const ch = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz°!"§$%&/()=?`´\}][{^+*~''#_:.,;<>|@'; begin result := ''; while Nb > 0 do begin result := ch[Nb mod Length(ch)+1] + result; Nb := Nb div Length(ch); end; end; |
Re: Brute Force Algorithmus
Was ist daran "Brute Force" :?:
Gruss, Tom [edit=Sharky]Doppelposting gelöscht. Mfg, Sharky[/edit] |
Re: Brute Force Algorithmus
und weiter ? :angle:
|
Re: Brute Force Algorithmus
ich denk mir mal das bruteforce daran ist das man der funktion übergibt die wievielte variante man haben will und die wird dann zurück gegeben. Somit erspart man sich z.B. die Passwortgenerierung...
Schneller sollte es allerdings gehen in dem man sich die letzte variante einfach zwischen speichert und die dann benutzt um das nächste variante zu erstellen. Ansosten dauert die generierung von mal zu mal länger Bsp.:
Delphi-Quellcode:
var pok: Boolean;
variante: Integer; begin pok := False; variante := 1; while not pOK do begin if enterpasswort(bruteforce(variante)) then pOK := True; inc(variante); end; |
Re: Brute Force Algorithmus
@SirThornberry: Genau :thuimb:
|
Re: Brute Force Algorithmus
Ich habe gerade festgestellt, er gibt zwar 'ba' aber nicht 'ab' aus bei iesen Zeichen: 'abcdefghijklmnopqrstuvwxyz'. Ist das ein fehler im Algorithmus oder ist das Absicht?
|
Re: Brute Force Algorithmus
warum macht ihr das nicht rekursiv, wäre das nicht einfacher? Dauert aber wahrscheinlich länger!
|
Re: Brute Force Algorithmus
Ich habe etwas Probleme mit dieser Zeile:
Delphi-Quellcode:
:gruebel:
result := ch[Nb mod Length(ch)+1] + result;
|
Re: Brute Force Algorithmus
Zitat:
|
Re: Brute Force Algorithmus
Dürfte ich das Thema noch mal nach oben holen? Da ich den Algotrithmus nicht so ganz verstehe, könnte mal bitte jemand versuchen rauszubekommen warum er 'ba' ausspuckt, aber nicht 'ab'? Und den Fehler beheben?
|
Re: Brute Force Algorithmus
Der Algorithmus konvertiert die Eingabezahl quasi in ein Ziffernsystem, wobei die "Ziffern" hier jedes Zeichen aus einem vorgegebenen String sein können.
Wenn du diese Funktion nimmst:
Delphi-Quellcode:
Damit kannst du damit eine Zahl in die oktale, dezimalzahle oder auch hexadezimale Darstellung konvertieren:
function NumberToChars(Value: Cardinal; const DigitSet: string): string;
var dsl: Cardinal; begin dsl := Length(DigitSet); Result := ''; repeat Result := DigitSet[Value mod dsl + 1] + Result; Value := Value div dsl; until Value = 0; end;
Delphi-Quellcode:
oder eben auch:
Okta := NumberToChars(Number, '01234567');
Dezi := NumberToChars(Number, '0123456789'); Hexa := NumberToChars(Number, '0123456789ABCDEF');
Delphi-Quellcode:
Normalerweise sollte für 10*97+11 der String 'AB' rauskommen (97=Länge des Zeichenvorrats).
function BruteForce(Nb: integer): string;
begin Result := NumberToChars(Cardinal(Nb), '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz°!"§$%&/()=?`´\}][{^+*~''#_:.,;<>|@'); end; |
Re: Brute Force Algorithmus
Ah, danke für die Erklärung. Ich werde es dann mal testen.
|
Re: Brute Force Algorithmus
Hallo Luckie
Zitat:
Wertigkeit der Operatoren Operator Rangfolge @, not Erste (höchste) *, /, div, mod, and, shl, shr, as Zweite +, -, or, xor Dritte -----------------<<<!!!! =, <>, <, >, <=, >=, in, is Vierte (niedrigste) mfg wo |
Re: Brute Force Algorithmus
Hab' jetzt gerade noch einen Fehler im Design festgestellt ... da bei dir das 'a' quasi als Null fungiert, kannst du damit wirklich nicht die Zeichenkette 'ab' erzeugen, da der Algorithmus schon nach 'b' abbricht. Da müsste man die Routine etwas abändern.
|
Re: Brute Force Algorithmus
Und wie müsste man das dann ändern?
|
Re: Brute Force Algorithmus
Hmmm ... :gruebel: das war nicht trivial 8)
Delphi-Quellcode:
In diesem Beispiel kommt für 28 'ab' heraus und für 53 'ba'.
function BruteForce(Nb: Cardinal): string;
const ch = 'abcdefghijklmnopqrstuvwxyz'; begin Result := ''; while Nb > Length(ch) do begin dec(Nb); Result := ch[Nb mod Length(ch) + 1] + Result; Nb := Nb div Length(ch); end; if Nb > 0 then Result := ch[Nb] + Result; end; |
Re: Brute Force Algorithmus
Du bist spitze. :P Ich habe mir da nämlich gerade einen dran abgebrochen. :roll:
|
Re: Brute Force Algorithmus
Ich bin immer noch mit dem BruteForce Algorithmus zugange:
Delphi-Quellcode:
Man kann jetzt also die Zeichen übergeben aus denen alle möglichen Zeichenfolgen zu bilden sind. Ist aber quasi nur etwas Kosmetik. Kann man das jetzt auch irgendwie so machen, dass er ab einer bestimmten Mindestlänge anfängt? Also man gibt 3 vor und dann fängt er nicht bei "a" an, sondern bei "aaa".
function BruteForce(Nb: Integer; Chars: String): string;
begin Result := ''; while Nb > Length(Chars) do begin dec(Nb); Result := Chars[Nb mod Length(Chars) + 1] + Result; Nb := Nb div Length(Chars); end; if Nb > 0 then Result := Chars[Nb] + Result; end; Für was soll eigentlich Nb stehe? :gruebel: |
Re: Brute Force Algorithmus
Ich muss das noch mal noch oben holen. ;)
|
Re: Brute Force Algorithmus
Zitat:
|
Re: Brute Force Algorithmus
Theoretisch kannst du ja alle Brute-Force-Wörter durchnummerieren
Beispiel (ABC)
Code:
Nb ist der Index des Wortes, dass du haben möchtest.
0 : ""
1 : "A" 2 : "B" 3 : "C" 4 : "AA" 5 : "AB" 6 : "AC" 7 : "BA" 8 : "BB" ... 13: "AAA" ... 40: "AAAA" Wenn du ab der Länge MinLen anfangen möchtest, dann musst du jeweils die Spannlängen addieren (3, 3^2, 3^3, 3^4, usw.).
Delphi-Quellcode:
Geht bestimmt auch mit 'ner direkten Formel, hab' jetzt gerade nicht so die Zeit mir lange Gedanken darüber zu machen.
function BruteForceLengthIndex(const Chars: String; Len: integer): integer;
var Factor: integer; begin Result := 0; Factor := 1; while Len > 0 do begin dec(Len); Result := Result + Factor; Factor := Factor * Length(Chars); end; end; |
Re: Brute Force Algorithmus
Nein, der Parameter sagt nur mit welchem Zeichen aus dem String er beginnen soll. Rufe ich den BruteForce Algorithmus mit 4 auf und der String fängt so an: "0123456789...", dann ist die erste Zeichenfolge die er zurückliefert "3". Er sollte aber mit "0000" anfangen die Zeichenfolgen zu generieren.
|
Re: Brute Force Algorithmus
Ha, Flocke mein Retter. :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz