Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Brute force Beschleunigen (https://www.delphipraxis.net/106996-brute-force-beschleunigen.html)

ForestX 20. Jan 2008 14:32


Brute force Beschleunigen
 
:dance: also es ging darum ein passwort recovery (premutation von silben und buchstaben) algorythmus zu schreiben lalala.
hab mir gedanken gemacht und hab was geschrieben bloß bekloppt lahm :dance: wen jemand ne idee hat wie mann die ganze geschichte effizienter machen kann bidde melden
Delphi-Quellcode:
   

implementation
/////////////////////////// Premutation;
var wert :array of Integer;
var List : Tstringlist;
var i,i2,i3,Sum :integer;{$R *.dfm}
var b : Bool;
label ub ;
var bas  :integer;
var s : string;
/////////////// ///// List wird mit den buchstabe ober silben geladen




procedure TForm1.Button1Click(Sender: TObject);
begin
gauge1.MaxValue := trunc(Power(list.count,strtofloat(edit1.text)))+1;


setlength(wert,strtoint(edit1.Text));
i := 0;
bas := list.Count;                              ////  strtoint(edit2.Text);

///// zahl mit basis bas auf null setzen
while i <= length(wert)-1 do
begin
wert[i] := 0;
i := i+1;
end;



i2 := 0;
i :=0;
b := true;
s := '';


while b do
begin


wert[0] := wert[0]+1;
while i <= length(wert)-2 do //-2 ---> bei der lezten zahl muss der überschlag nichtmehr beachtet werden
begin
if wert[i] = bas then         /// überschlag kommt moon happening;
begin
wert[i] := 0;                      //// zurüchseztung
Wert[i+1]:= wert[i+1]+1;        //// überschlag
end;
I := i+1;
end;



////////////endstation wenn dies erreicht istist mn beim end angekommen
i3 := 0;
sum := 0;
while i3 <= length(wert)-1 do
begin
sum := sum +wert[i3]+1;
i3 := i3+1          ;
end;

if i3*bas = sum then
begin
b := false;
end;

//////////////////////


///////////////visual erstellung des strings
while i2 <= length(wert)-1 do
begin
s := s + list[wert[i2]];
i2 := i2+1;
end;

Gauge1.Progress := Gauge1.Progress +1;

Application.ProcessMessages;
label1.Caption:= s;
listbox1.Items.Add(s) ; ////// ihrgendeiner listbox hinzufügen
i2:=0;
i:=0;
s := '';

end;
end;
:freak:


thX forestX

API 20. Jan 2008 14:40

Re: Brute force Beschleunigen
 
Hallo, schau dir doch mal das an:
TBruteForce Komponente

SirThornberry 20. Jan 2008 14:41

Re: Brute force Beschleunigen
 
hallo, es ist nicht böse gemeint aber wenn du den Quelltext ordentich einrückst schauen sich diesen bedeutend mehr leute an und du bekommst auch Hilfe. Ich wollte mir ihn grad anschauen und hab nach den ersten Zeilen aufgehört weil durch die fehlende Einrückung jegliche Übersicht fehlt.

alzaimar 20. Jan 2008 15:27

Re: Brute force Beschleunigen
 
Vielleicht suchst Du auch mal nach 'Permutation' hier in der DP... Ich meine, mich erinnern zu können, hier etwas darüber gelesen zu haben. Aber das Einrücken geht vor. Ganz klar. :zwinker:

SirThornberry 20. Jan 2008 15:31

Re: Brute force Beschleunigen
 
was mir bisher aufgefallen ist. Du rufst mehrfach Length auf anstelle dir das Ergebnis auf eine Variable zu speichern. Das ist ein geringer Geschwindigkeitsverlust. Das Hauptproblem sind aber Dinge wie:
Delphi-Quellcode:
stringvariable = stringvariable + irgendwas;
Damit wird ständig im Speicher rum geschaufelt. Denn für den String wird speicher angefordert. Wenn du jetzt etwas hinzufügst muss wieder speicher angefordert werden (damit was neues dazu passt), der alte Inhalt muss in den neuen Bereich kopiert werden, das neue wird angehangen und der vorherige speicher wird frei gegeben.

ForestX 20. Jan 2008 15:42

Re: Brute force Beschleunigen
 
Hab halt einen eigenwilligen Stiel. Ganz klar. :dance:
auf jeden die Geschichte mit dem stack habe ich noch garnicht bedacht -> vielen dank ich - binn immer für Anregungen offen
:dance:

snow 20. Jan 2008 17:56

Re: Brute force Beschleunigen
 
du könntest die stingvariable auf 100 begrenzen. dann wird der speicher nicht immer wieder erweitert. 100 zeichen sollten für ein password genügen. Falls es mehr sein solln wirst du mit brute-force jahrhunderte dran sitzen.

gruß snow

Florian H 20. Jan 2008 19:19

Re: Brute force Beschleunigen
 
Zitat:

Zitat von ForestX
Hab halt einen eigenwilligen Stiel. Ganz klar. :dance:

Nicht einrücken ist kein Stil sondern ein Verbrechen an denen, die sich da dann durcharbeiten müssen.

ForestX 22. Jan 2008 13:04

Re: Brute force Beschleunigen
 
gehört nicht zu dem thema ob ich etwas ein Rücke oder nicht' nimand wieder gezwungen mein geschreibsel durch zu arbeiten' soweit bidde wieder zu eigentlichen thema zurück * wenn jemand will kann ich eine diskusion aufmachen ob ich es schön geschrieben habe oder ob ich noch ein paar blumen und baüme hätte hinzu malen sollen Thx(nur für ernsthafte Beiträge ) mfg Forest :dance: X

rawsoul 22. Jan 2008 13:14

Re: Brute force Beschleunigen
 
[ot]Ich mag Satzzeichen :roll:[/ot]

Ich kann auch die schon erwähnte TBruteforce empfehlen. Ist ziemlich schnell und trivial zu bedienen.

Ansonsten habe ich noch das in meiner Codeschnipsel.pas gefunden. Leider habe ich anscheinend bereits Kommentare zum Autor gelöscht, kann diesen also nicht mehr nennen, bitte verzeiht mir :(

Delphi-Quellcode:
function bruteforce(astring,substr:string;startlen,endlen:integer):boolean;
var
  //count variables
  i,n,x:integer;
  //current password
  npw:string;
label
  //used for looping
  step1;
begin
  //clear all stringlists
  hlplst.clear;
  cluster.clear;
  results.clear;

  //fill the helplist with the charrange
  for x:=1 to length(substr) do
    hlplst.add(substr[x]);

  //begin the loop
  step1:
  //start combining the letters in the charrange
  for i:=0 to hlplst.count-1 do
    for n:=1 to length(astring) do
      begin
        //combine one letter in the helplists with another
        npw:=hlplst.strings[i]+astring[i];
        //add it to the cluster
        cluster.add(npw);
        //if its longer then the startlength, then add it do the results
        if length(npw)>=startlen then results.add(npw);
      end;
  //clear the helplist
  hlplst.clear;
  //and fill it with the cluster
  hlplst.addstrings(cluster);
  //clear the cluster
  cluster.clear;
  //and repeat those steps if not all possible combinations have been added
  if length(npw)+1<=endlen then goto step1;
  //clear the helplist
  hlplst.clear;
  //(just for debugging)
  result:=true;
end;
Wird so aufgerufen:
Delphi-Quellcode:
bruteforce('abcd','abcd',2,6)


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

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