Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Wenn Alphabet zuende, dann von vorne anfangen


Xeron - Do 28.01.10 17:44
Titel: Wenn Alphabet zuende, dann von vorne anfangen
Hi, ich will ein Passwort Generator basteln. Dieses Passwort soll nur aus Buchstaben bestehen.

Wie kann ich nun erreichen, wenn das Programm A..Z erstellt hat, das es mit AA weiter macht?
Also A..Z, weiter mit AA..ZZ, AAA..ZZZ usw.?

Danke


aksdb - Do 28.01.10 17:51

Wäre für einen Passwortgenerator nicht Randomize und Random sinnvoll? Eine Liste mit allen Kombinationsmöglichkeiten scheint mir nicht gerade sinnvoll zu sein (abgesehen davon, dass die ziemlich groß wird ;-))


Xeron - Do 28.01.10 17:56

Ja, aber Random schafft ja nur Zahlen oder seh ich das Falsch?


ALF - Do 28.01.10 18:17

Festlegen in welchen zahlenbereich, also 65 - 92, sind glaube ich alle GrossBuchstaben.
Dann Zufall generieren und Zahl mit chr(zufallszahl) in Buchstaben wandeln!
Währe die einfachst Möglichkeit

Gruss Alf


Xeron - Do 28.01.10 18:27

Nein nein, das hat schon alles seine richtigkeit.

ich habe es jetzt so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
var
  Form1: TForm1;
  s: Char = 'a';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  OpenDialog1.Execute;
  Edit1.Text := OpenDialog1.FileName;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
begin
  for i := 1 to 26 do
  begin
    s := Chr(Ord(s)+1);
    ListBox1.Items.Add(s);
    ProgressBar1.Position := i;
    if i = 26 then
    begin
      ListBox1.Items.Add(s)
    end
 end;
  ProgressBar1.Position := 100;
end;


end.


und jetzt, wenn ich bei z angekommen bin, soll automatisch von vorne begonnen werden, und das Zeichen dan das Zeichen an die ersten 26 Buchstaben gehangen werden.


jaenicke - Do 28.01.10 18:29

Du kannst mit Modulo arbeiten. Dann kannst du immer weiterzählen und mit modulo 26 landest du wieder zwischen 0 und 25. Diesen Rest der Division kannst du dann zum Zeichencode vom a addieren um einen Zeichencode zu haben.


Xeron - Do 28.01.10 18:34

hmm, versteh ich grade nicht so. modulo = mod oder

kannste mal ein ganz kurzes Beispiel zeigen? Danke ;)


jaenicke - Do 28.01.10 18:38


Delphi-Quelltext
1:
2:
for i := 0 to 100 do
  ShowMessage(Chr(Ord('a') + i mod 26));


Xeron - Do 28.01.10 18:41

dann wird aber immer wieder von vorne gezählt. ich will aber das das Zeichen an das andere Zeichen drangehängt wird.
Also so:

a
b
c
..
x
y
z
aa
ab
ac
..
az
aaa
..


Xentar - Do 28.01.10 18:44

Spätestens, wenn du auch Sonderzeichen haben willst, könnte das mit mod aber problematisch werden.

Hab mir auch mal nen Passwortgenerator gebaut. Hab das da so gelöst, dass ich einen String hatte, wo alle verwendbaren Zeichen drinstehen s := 'asDFgH'; , und dann mit random(length(s)) ein beliebiges Zeichen daraus ausgewählt habe.


ALF - Do 28.01.10 18:51

user profile iconXeron
Zitat:
ich will aber das das Zeichen an das andere Zeichen drangehängt wird.

und wann willst Du aufhören? Ich sehe da sonst keine Ende!!!!

Gruss Alf


Xeron - Do 28.01.10 19:04

naja, so nach 10-12 Zeichen
also z.B.

aghtfifnhdg


elundril - Do 28.01.10 19:05

user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconXeron
Zitat:
ich will aber das das Zeichen an das andere Zeichen drangehängt wird.

und wann willst Du aufhören? Ich sehe da sonst keine Ende!!!!

Gruss Alf


kann man ja in einer Schleife festlegen, oder. ;)


ALF - Do 28.01.10 19:12

Aber so wie er es machen will hatt es nichts mit einen PWgenerator zu tuen!?
oder seh ich das Falsch :shock:

Gruss Alf


Xeron - Do 28.01.10 19:15

Ich hätte eine neue Idee.
Ginge es mit einer Goto Anweisung?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
  Label Sprung;
begin
  Sprung:
  for i := 1 to 26 do
  begin
    s := Chr(Ord(s)+1);
    ListBox1.Items.Add(s);
    ProgressBar1.Position := i;
    if i = 26 then
    begin
      Goto Sprung;
      ListBox1.Items.Add(s)
    end
 end;
  ProgressBar1.Position := 100;
end;


oder irgendwie so


elundril - Do 28.01.10 19:21

du weißt das du damit eine endlosschleife erzeugen würdest?

lg elundril


Xeron - Do 28.01.10 19:22

ja, auch grade gemerkt.

Naja, gibt irgendeinen Befehl um 2 Char Typen zusammen zu kopieren wie
etwa s := s + s;


Xentar - Do 28.01.10 19:23

user profile iconXeron hat folgendes geschrieben Zum zitierten Posting springen:
ja, auch grade gemerkt.

Naja, gibt irgendeinen Befehl um 2 Char Typen zusammen zu kopieren wie
etwa s := s + s;

Probier diese eine Zeile mal bitte aus...
Aber das Ergebnis passt nicht mehr in einen Char, da es ja zwei Zeichen sind. Also musst du nen String nehmen.


Xeron - Do 28.01.10 19:43

ok, habs jetzt so halbwegs.
Wie kann ich jetzt aber einen Char in einen String umwandeln?

c := String(s);

geht ja irgendwie nicht

und einfach c := s auch nicht


Xentar - Do 28.01.10 19:46

Aus der Benennung deiner Variablen schließe ich, dass du links und rechts vom Gleichheitszeichen vertauschst..

Und noch was: Bitte gewöhn dir an, statt "geht nicht" direkt die Fehlermeldung mitzuposten.


Bergmann89 - Do 28.01.10 19:53

Hey,

also ich bin der Meinung dass das am bessten durch ne Rekursion zu lösen geht:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
PROZEDURE GetPasswords(Start: String; Depth, MaxDepth: Integer)
  zähle alle buchstaben durch (0-25)
    füge den start-String + den aktuellen Buchstaben zur Liste hinzu
    wenn die Tiefe (Depth) nicht die maximale Tiefe (MaxDepth) ist, dann... 
      Rufe dich selbst mit folgenden Parametern auf: 
        Aktuelles Passwort(Start+Buchstabe), 
        Tiefe+1,
        Maximale Tiefe
END-PROZEDURE GetPasswords
So kommt man mit GetPasswords('', 0, 2) auf alle Buchstaben von 'A' bis 'ZZZ'

€: Für mich sieht das auch ncih wirklich nach nem PW-Generator aus. Das sieht er wie n BruteForce aus :roll:

MfG Bergmann


Xentar - Do 28.01.10 19:59

Nur mal zum Verständnis:
Was genau möchtest du nun eigentlich?
a) Ein Passwort richtig zufällig generieren lassen
b) Von A bis ZZZZ alle Kombinationen Brute forcen

?

Wenn es a werden soll, ist der Ansatz vollkommen murks.


Bergmann89 - Do 28.01.10 20:02

user profile iconXeron hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich nun erreichen, wenn das Programm A..Z erstellt hat, das es mit AA weiter macht?
Also A..Z, weiter mit AA..ZZ, AAA..ZZZ usw.?
Klingt für mich nach BruteForce...


Xentar - Do 28.01.10 20:03

user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconXeron hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich nun erreichen, wenn das Programm A..Z erstellt hat, das es mit AA weiter macht?
Also A..Z, weiter mit AA..ZZ, AAA..ZZZ usw.?

Klingt für mich nach BruteForce...
Ja, für mich auch.
Aber im ersten Post ist auch die Rede von einem Passwortgenerator - aber das ist für mich etwas anderes.


ALF - Do 28.01.10 20:05

Ich wollts nicht sagen B...F..... :wink:

Gruss Alf


Bergmann89 - Do 28.01.10 20:06

Ja eigentlich schon. Vlt hat er sich verschrieben un es soll ein PasswortKNACKER werden :lol:


Xeron - Do 28.01.10 20:32

ne ne, soll bloß halt die Funktion von nem Brute Force sein, aber dafür benutze ich es nicht.


ALF - Do 28.01.10 20:36

lol für was dann,
jedenfalss nicht für ein PWGenerator oder??


Xeron - Do 28.01.10 20:39

doch, eigentlich schon :O


ALF - Do 28.01.10 20:45

Dann ist Dein Ansatz dafür falsch!
Du erzeugst damit kein PW, jedenfals nicht so.

Gruss Alf


Bergmann89 - Do 28.01.10 20:45

na dann viel spaß... mal angenommen ich will 10 Stellen in meinem PW haben, das sind 27^10 verschiedene Möglichkeiten. Der rechnet bei mir schon an 4 Stellen ca 10 sec. Un das ganze geht exponentiell in die Höhe. Für 10 Stellen dauert das ganze dann viel zu lange!


ALF - Do 28.01.10 20:55

user profile iconBergmann89
Zitat:

na dann viel spaß...

nicht nur das es lange dauert,
er will ja auch nur Grossbuchstaben verwenden. Wo ist da das sichere Passwort?

Irgendwie verstehe ich ihn nicht! :?

Gruss ALf


Bergmann89 - Do 28.01.10 21:06

vlt ist macht das Programm kein unterschied zwischen groß un klein. der WPA-Key vom WLAN macht das ja auch nich, oder irre ich mich da jetz?


ALF - Do 28.01.10 21:33

gelöscht !!


jaenicke - Do 28.01.10 21:35

user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Was Du vermutest ist eigentlich egal, wissen tust Du es nicht!
Jedenfalls ist es nicht das, was Dein Topic sagt und nicht das, was in Deiner Anfrage steht!
Ich glaube du verwechselst gerade user profile iconBergmann89 mit user profile iconXeron, nur bei letzterem steht deshalb ja auch (Threadstarter). ;-)


ALF - Do 28.01.10 21:39

rofl, user profile iconBergmann89Entschuldigung
hab das verwechselt :oops: