Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi In Schleife Passwörter erzeugen (https://www.delphipraxis.net/21934-schleife-passwoerter-erzeugen.html)

nieurig 10. Mai 2004 12:34


In Schleife Passwörter erzeugen
 
Hallo Leute,
ich sitze nur seit 2 Stunden und suche nach dem Grund ... und finde keinen.

Ich habe eine Testfunktion geschrieben, um die Verschlüsselung von Passwörtern in meinem Programm zu testen. Die Funktion erstellt automatisch neue Passwörter, speichert diese verschlüsselt in der DB (auch schon ohne Speichern versucht) und liest sie wieder ein.

Mein Problem ist nun, dass in der for-Schleife aus irgendeinem Grund keine neuen Passworte gebildet werden. Wenn ich die Passwörter in eine Datei schreibe, unterscheiden sich nur die ersten zwei Zeilen. Die letzten 48 Vergleiche finden meist mit dem gleichen Passwort statt. Wieso bloß?

Ach ja, wenn ich an irgendeiner Stelle in der Schleife eine MessageBox anzeige, klappt es wie gewünscht. Ich peile nicht warum.

Ich danke schon im Voraus für Eure Hinweise.
Niels



Code:
procedure TFLogin.Button3Click(Sender: TObject);
var TestPW, Doppel : String; i:Integer;
    dat : TextFile;
begin
  AssignFile(dat,'C:\Fehlerhafte.txt');
  rewrite(dat);
  randomize;
  for i := 1 to 50 do begin
    TestPW := '';
    while Length(TestPW) < 26 do
      TestPW := TestPW + char( Random(210)+30 );

    write(dat,inttoStr(i)+'-'+TestPW + '->');
    saveBenutzerPW('TestUser',TestPW);

    doppel := getNutzerPW('TestUser');
    write(dat,doppel);
    if Doppel = TestPW then writeln(dat,'*OK*')
                       else writeln(dat,'*--*');
  end;
  closefile(dat);
  inpName.Text := 'Fertig';

end;
Die aufgerufene Procedure hat folgenden Funktionskopf:

Code:
procedure saveBenutzerPW(BenutzerName, Kennwort :String);
und dürfte ja wohl keinen Einfuss auf den Wert der lokalen Variablen TestPW haben – oder? :gruebel:

Dax 10. Mai 2004 12:36

Re: In Schleife Passwörter erzeugen
 
Ich peil deinen code auch nicht, könntest du ein paar Kommentare reinmachen oder getNutzerPW und saveNutzerPW auch noch Zeigen?

nieurig 10. Mai 2004 12:56

Re: In Schleife Passwörter erzeugen
 
Hi Dax,
ich hatte nicht gedacht, das die paar Zeilen SO unübersichtlich sein könnten. Nun denn ...

Ach ja, der Code in der Procedure kann keinen Einfluss haben.
Code:
procedure saveBenutzerPW(BenutzerName, Kennwort :String);
Deshalb habe ich ihn nicht gezeigt.


Niels



Code:
procedure TFLogin.Button3Click(Sender: TObject);
var TestPW, Doppel : String; i:Integer;
    dat : TextFile;
begin
  // Öffnen eine Textdatei
  AssignFile(dat,'C:\Fehlerhafte.txt');
  rewrite(dat);

  // Schleife erzeugt 50 Passwörter
  randomize;
  for i := 1 to 50 do begin

    // Erzeugen eines Passwortes
    TestPW := '';
    while Length(TestPW) < 26 do
      TestPW := TestPW + char( Random(210)+30 );

    // Schreiben des Passwort in Datei und in DB
    write(dat,inttoStr(i)+'-'+TestPW + '->');
    saveBenutzerPW('TestUser',TestPW);

    // Lesen des Passwortes aus DB und schreiben in Datei
    doppel := getNutzerPW('TestUser');
    write(dat,doppel);

    // Vergleich, ob beide gleich sind
    if Doppel = TestPW then writeln(dat,'*OK*')
                       else writeln(dat,'*--*');
  end;
  // Datei schließen
  closefile(dat);
  inpName.Text := 'Fertig';

end;

glkgereon 14. Mai 2004 22:32

Re: In Schleife Passwörter erzeugen
 
du solltest den fehler einkreisen, d.h. eine zeile nach der anderen auskommentieren, bis es funzt, oder gar nichts mehr tut, dann hast du schon mal die zeile, in der es hakt :wink:


denn ich glaube das du am ende dieses
Delphi-Quellcode:
if doppel=Passwd ...
weglassen kannst, da es wahrscheinlich nix damit zutun hat

eroe 15. Mai 2004 13:03

Re: In Schleife Passwörter erzeugen
 
ich hab zum testen mal den ganzen schnickschnack, den du für deine verwendung brauchst, rausgenommen, hatte also nur noch folgenden code

Code:

procedure TForm1.Button1Click(Sender: TObject);
  var TestPW, Doppel : String; i:Integer;
    dat : TextFile;

begin
 
  AssignFile(dat,'C:\Fehlerhafte.txt');
  rewrite(dat);
  randomize;
 
  for i := 1 to 7 do
    begin
      TestPW := '';
      while Length(TestPW) < 26 do
        TestPW := TestPW + char( Random(210)+30 );
 
      write(dat,inttoStr(i)+'-'+TestPW + '->');
    end;

  closefile(dat);

end;
und siehe da, es funktioniert :)
meine 'Fehlerhafte.txt' sah wie folgt aus :

Code:

1-’KV íê0tyµ²¸R')b}`äÈÂ#¶/,é->
2--Ìb°Q°é%¡7¡^Åá´!K±¹~,:¹8->
3-,HÖ6aÞvÄy½Œak«ÄÉá9ĆN·nŸK->
4-T€—áèLq:—²cƒ:ÄÒ»6©Õˆ×j½¼Å->
5-"-½D¾’^H-’²Ö‚¿o ¿wÎeçu5Ó¤.->
6-®ØqŸ›Nyä˜ÆÊY"N·„6iª,Jo×7¶->
7-0kRš|tLKÔ¦UŒÕÛ5³SZÄ\.\Pq*->
also denk ich mal, liegt der fehler irgendwo bei deinen ganzen vergleichen mit dem 'soll'-pw oder so ..


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 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