AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Denkblockade (rekursive funktion)

Ein Thema von Meflin · begonnen am 17. Feb 2005 · letzter Beitrag vom 18. Feb 2005
Antwort Antwort
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#1

Denkblockade (rekursive funktion)

  Alt 17. Feb 2005, 20:17
Hi,

vielleicht kennt ja jemand mein brute force tut (hier in der tutorials sparte). das dort beschriebene verfahren ist zwar schön simpel und auch ganz gut was die geschwindigkeit angeht, nur verbruacht es halt wirklich extrem viel arbeitsspeicher. deswegen bin ich momentan dabei mir ein besseres verfahren auszudenken (das natürlich immernoch distributed brute forcing fähig sein soll )

das geht dann wie gefolgt:
gegeben sind ein string mit den zeichen, aus denen das passwort gebildetwerden soll, sowie ein substring, der die teilaufgabe des programms darstellt
Delphi-Quellcode:
string: abcdefghijklmnopqrstuvwxyz
substring: ab
mit diesen daten bilde ich nun zunächst die kombinationen der länge 2 (wie im alten verfahren auch schon)
Delphi-Quellcode:
aa ab ac ad ae af...
ba bb bc bd be bf...
diese kombinationen werden dann im ram behalten. aus ihnen sollen alle anderen passwörter erstellt werden, sodass immer nur diese (wenigen) kombinationen im arbeitsspeicher benötigt werden. das geht auch.

dazu muss man ja für passwörter der länge 4 einfach nur an jeden eintrag dieses buffers jeden anderen eintrag hinhängen. für die der länge 6 (im moment interessieren nur die geraden längen ) muss man für jedes der aus 4 gebildeten nochmal alle aus der liste anhängen.
Delphi-Quellcode:
aa | aa | aa
          ab
          ac
          ...
     ab | aa
          ab
          ac
          ...
     ac | aa
          ab
          ac
          ...
ich hoffe ihr versteht wie ich das meine. nun aber zu meinem problem: die vorher gebildeten längen sollen ja nicht im speicher behalten werden, d.h. ich muss jedes passwort neu berechnen.
da ich ja also sozusagen für jede länge eine größere anzahl von schleifen benötige, ist mir heute in der englisch stunde so gedämmert, dass sich das wohl mit rekursiven funktionen lösen lassen müsste. nur in mathe, erdkunde, deutsch, französisch, latein, geschichte, chemie und musik ist mir kein bisschen ein lichtlein aufgegangen, was diese funktion machen müsste.
kurz gesagt ich habe zwar ein verfahren, bin aber etwas unfähig das nach pascal zu übersetztn

ich hoffe auf eure hilfe

  Mit Zitat antworten Zitat
Benutzerbild von atreju2oo0
atreju2oo0

Registriert seit: 5. Dez 2003
Ort: Berlin
289 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: Denkblockade (rekursive funktion)

  Alt 17. Feb 2005, 20:31
Delphi-Quellcode:


procedure reku(a:string);
begin
dowith(a) // Hier kannste auf den String zugreifen und halt was mit machen
For i:=0 to count(Zeichen) do // count Zeichen soll mal die Menge der gesamten Zeichen sein
reku(a+Zeichen[i]); // Hier wird der nächste Schritt gestartet und dazu dein Char angehängt

end;
Aufrufen kannste das ganze mit
reku('');

[edit] Erst beim zweiten Mal lesen richtig verstanden... hoffe ich [/edit]
Thomas
  Mit Zitat antworten Zitat
Dust Signs

Registriert seit: 28. Dez 2004
Ort: Salzburg
379 Beiträge
 
#3

Re: Denkblockade (rekursive funktion)

  Alt 17. Feb 2005, 20:33
Wie wärs mit sowas (ungetestet)?

Delphi-Quellcode:
function CheckPassword(APassword: String; Depth: Integer): Boolean;
var
  i, j: Byte;
begin
  if Depth <= 0 then
    exit;
  for i := #97 to #122 do begin
    for j := #97 to #122 do begin
      CheckPassword(APassword + Chr(i) + Chr(j));
      //evtl. Result von CheckPassword bearbeiten...
      end;
    end;

  //Hier der Check...

  Dec(Depth, 2);
end;
Aufruf:

ABoolean := CheckPassword('', 6); Nur so eine Idee...

Dust Signs

//EDIT: Mist, zu langsam ^^
(aka AXMD in der EE)
Die Nummer, die Sie gewählt haben, ist imaginär. Bitte drehen Sie Ihr Telefon um 90° und versuchen Sie es erneut.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: Denkblockade (rekursive funktion)

  Alt 17. Feb 2005, 20:52
Ist jetzt nur so ausm Kopf, aber trotzdem:

Wir machen eine rekursive Prozedur, Parameter:
bisheriges Passwort
Zeichen für das Pwd
Wieviele Zeichen sollen noch angehängt werden ?
TStrigList für die Ergebnisse

Delphi-Quellcode:
procedure BruteForce (const Pass, Zeichen: String; Length: Byte; Ergebnisse: TStringList);
  If Length = 0 then Exit;

  If Length = 1 then
    for i := 1 to length (Zeichen) do
      Ergebnisse.Add (Pass + Zeichen[i]);
  else
    for i := 1 to length (Zeichen) do
      BruteForce (Pass + Zeichen[i], Zeichen, Length - 1, Ergebnisse);
end;
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#5

Re: Denkblockade (rekursive funktion)

  Alt 18. Feb 2005, 22:48
thx euch allen, keiner eurer vorschläge löst das problem ganz aber imerhin hats gereicht, um meine denkblockade aufzuheben ich habs jetzt... BIG THX!

  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz