Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr.
Seite 2 von 3     12 3      

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