Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Brute Force Algorithmus (https://www.delphipraxis.net/14792-brute-force-algorithmus.html)

SleepyMaster 15. Jan 2004 19:56


Brute Force Algorithmus
 
Hi ihrs!

Hab hier mal einen Code von Illuminator umgeschrieben.

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;

Jelly 15. Jan 2004 20:35

Re: Brute Force Algorithmus
 
Was ist daran "Brute Force" :?:

Gruss,
Tom

[edit=Sharky]Doppelposting gelöscht. Mfg, Sharky[/edit]

delphi_newbie_123 15. Jan 2004 20:37

Re: Brute Force Algorithmus
 
und weiter ? :angle:

SirThornberry 15. Jan 2004 20:53

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;

SleepyMaster 16. Jan 2004 11:22

Re: Brute Force Algorithmus
 
@SirThornberry: Genau :thuimb:

Luckie 26. Jul 2005 23:56

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?

Eichhoernchen 27. Jul 2005 00:30

Re: Brute Force Algorithmus
 
warum macht ihr das nicht rekursiv, wäre das nicht einfacher? Dauert aber wahrscheinlich länger!

Luckie 27. Jul 2005 10:33

Re: Brute Force Algorithmus
 
Ich habe etwas Probleme mit dieser Zeile:
Delphi-Quellcode:
result := ch[Nb mod Length(ch)+1] + result;
:gruebel:

Phoenix 27. Jul 2005 10:36

Re: Brute Force Algorithmus
 
Zitat:

Zitat von Eichhoernchen
warum macht ihr das nicht rekursiv, wäre das nicht einfacher? Dauert aber wahrscheinlich länger!

Nicht zwingend länger. Das Problem ist das es bei grosser Rekursionstiefe gerne zu Stack-Überläufen kommt, die iterativ 'nur' auf den Speicher gehen, nicht jedoch auf den Stack.

Luckie 1. Aug 2005 11:27

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?

Flocke 1. Aug 2005 11:49

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:
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;
Damit kannst du damit eine Zahl in die oktale, dezimalzahle oder auch hexadezimale Darstellung konvertieren:
Delphi-Quellcode:
Okta := NumberToChars(Number, '01234567');
Dezi := NumberToChars(Number, '0123456789');
Hexa := NumberToChars(Number, '0123456789ABCDEF');
oder eben auch:
Delphi-Quellcode:
function BruteForce(Nb: integer): string;
begin
  Result := NumberToChars(Cardinal(Nb), '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz°!"§$%&/()=?`´\}][{^+*~''#_:.,;<>|@');
end;
Normalerweise sollte für 10*97+11 der String 'AB' rauskommen (97=Länge des Zeichenvorrats).

Luckie 1. Aug 2005 11:51

Re: Brute Force Algorithmus
 
Ah, danke für die Erklärung. Ich werde es dann mal testen.

WoGe 1. Aug 2005 12:02

Re: Brute Force Algorithmus
 
Hallo Luckie

Zitat:

Zitat von Luckie
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?

Das dürfet einfach daran liegen:

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

Flocke 1. Aug 2005 12:14

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.

Luckie 1. Aug 2005 13:31

Re: Brute Force Algorithmus
 
Und wie müsste man das dann ändern?

Flocke 1. Aug 2005 14:15

Re: Brute Force Algorithmus
 
Hmmm ... :gruebel: das war nicht trivial 8)
Delphi-Quellcode:
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;
In diesem Beispiel kommt für 28 'ab' heraus und für 53 'ba'.

Luckie 1. Aug 2005 14:21

Re: Brute Force Algorithmus
 
Du bist spitze. :P Ich habe mir da nämlich gerade einen dran abgebrochen. :roll:

Luckie 2. Okt 2005 16:55

Re: Brute Force Algorithmus
 
Ich bin immer noch mit dem BruteForce Algorithmus zugange:
Delphi-Quellcode:
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;
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".

Für was soll eigentlich Nb stehe? :gruebel:

Luckie 4. Okt 2005 08:46

Re: Brute Force Algorithmus
 
Ich muss das noch mal noch oben holen. ;)

lizardking 4. Okt 2005 10:18

Re: Brute Force Algorithmus
 
Zitat:

Zitat von Luckie
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".

Die Laenge ergibt sich doch aus dem uebergebenen Parameter Nb (schaetze uebrigens, das steht einfach fuer "Number"). Beispielsweise bei der Zeichenkette 'abc', hat die Ausgabe ab Nb=4 zwei Stellen, dann ab Nb=40 drei Stellen usw.

Flocke 4. Okt 2005 10:24

Re: Brute Force Algorithmus
 
Theoretisch kannst du ja alle Brute-Force-Wörter durchnummerieren

Beispiel (ABC)
Code:
0 : ""
1 : "A"
2 : "B"
3 : "C"
4 : "AA"
5 : "AB"
6 : "AC"
7 : "BA"
8 : "BB"
...
13: "AAA"
...
40: "AAAA"
Nb ist der Index des Wortes, dass du haben möchtest.

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:
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;
Geht bestimmt auch mit 'ner direkten Formel, hab' jetzt gerade nicht so die Zeit mir lange Gedanken darüber zu machen.

Luckie 4. Okt 2005 10:25

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.

Luckie 4. Okt 2005 10:36

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