Announcement

Collapse
No announcement yet.

Hab da ein kleines Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hab da ein kleines Problem

    Hallo Hagen, oder jeder andere

    Ich habe mal wieder ein kleines Problem. Somit muss ich erst einmal das Problem umschreiben.<br>
    Also, mein Passwortmanager funktioniert nun eigentlich wunderbar. Um Zugang zum Programm zu bekommen braucht man nur ein globales Passwort. Dieses Passwort ist zwar von mir vorgegeben, kann aber dann im Programm geändert werden. Da liegt aber schon ein kleines Problem.
    Dieses globale Passwort speichere ich in einer ini-Datei. Natürlich habe ich diese Datei verschlüsselt. Diese ini-Datei wird dann aber nur kurz entschlüsselt, um das vom Nutzer beim Programmstart eingegebene Passwort zu vergleichen, und dann sofort wieder verschlüsselt. Klappt wirklich wunderbar. Ich hab mal ein Stück Quellcode:<br><p>

    procedure TPasswordDlg.FormCreate(Sender: TObject);<br>
    var IniFile: TIniFile;<br>
    const schluessel='1234egal'; // Codierungsschlüssel, soll fest sein<br>
    begin<br>
    CipherManager.InitKey(schluessel, nil); // den Schlüssel initialisieren<br>
    <br>
    if FileExists ('pwb_options.ini') then // Test, ob Datei existiert<br>
    begin<br>
    IniFile := TIniFile.Create('.\pwb_options.ini');// ini-Datei erzeugen<br>
    CipherManager.DecodeFile('.\pwb_options.ini', '.\pwb_options.ini'); // ini-Datei decodieren<br>
    try<br>
    ini_passwd:=IniFile.ReadString('Optionen','Passwor t', 'ERROR'); // Passwort auslesen<br>
    finally<br>
    IniFile.Free;<br>
    CipherManager.EncodeFile('.\pwb_options.ini', '.\pwb_options.ini'); // ini-Datei wieder codieren<br>
    end;<br>
    end<br>
    else<br>
    ShowMessage('Datei konnte nicht gefunden werden!');<br>
    end; <br>
    <br><p>
    Wie man sieht, wird hier nur die Datei decodiert, das Passwort ausgelesen, in der Variablen zum späteren Vergleich gespeichert und die Datei wieder codiert.<br>
    Wie gesagt, bis hier gibt es kein Problem.
    In dem nun folgenden Codeabschnitt, wird gezeigt, wie der Anwender später das Passwort wieder ändern kann. Der Anwender muss ein neues Passwort eingeben(MaskEdit1) und das Passwort bestätigen(MaskEdit2). Danach wird wieder die ini-Datei entschlüsselt, mit <b>IniFile.WriteString(...)</b> der richtige Abschnitt gesucht, das alte Passwort überschrieben und die Datei wieder codiert. Auch das funktioniert. Wenn ich das Programm dann wieder starte und das neue Passwort eingebe, dann wird es nicht akzeptiert. Auch das alte Passwort funktioniert nicht mehr. Wo liegt das Problem????<br>
    Was mir noch einfällt. Der codierte Text in der ini-Datei ist nach dem ändern des Passwortes, auch wenn das neue Passwort kürzer ist als das alte, wesentlich länger. Als wenn der Abschnitt in der ini-Datei nicht ersetzt wird, sondern erweitert wird.<br>
    Das geschieht aber auch nicht, da ich den Inhalt der ini-Datei mal verglichen hatte ohne sie zu codieren. Ist es möglicherweise ein Problem mit der Komponente??<br><p>

    procedure TForm2.SpeedButton2Click(Sender: TObject);<br>
    var IniFile: TIniFile;<br>
    const schluessel='1234egal'; // Codierungsschlüssel, soll fest sein<br>
    begin<br>
    CipherManager.InitKey(schluessel, nil); // den Schlüssel initialisieren<br>
    <br>
    if MaskEdit1.Text <> '' then // Testen, ob überhaupt ein Zeichen eingegeben wurde<br>
    begin<br>
    if MaskEdit1.Text = MaskEdit2.Text then // wenn Passwörter übereinstimmen<br>
    begin<br>
    // ini-Datei mit aktuellen Informationen überschreiben<br>
    IniFile := TIniFile.Create('.\pwb_options.ini');// ini-Datei erzeugen<br>
    CipherManager.DecodeFile('.\pwb_options.ini', '.\pwb_options.ini'); // ini-Datei decodieren<br>
    try<br>
    IniFile.WriteString('Optionen','Passwort',MaskEdit 2.Text);// Passwort in ini-Datei schreiben<br>
    finally<br>
    IniFile.Free; // Datei freigeben<br>
    CipherManager.EncodeFile('.\pwb_options.ini', '.\pwb_options.ini'); // ini-Datei wieder codieren<br>
    end;<br>
    Close;<br>
    end;<br>
    end;<br>

  • #2
    Hallo,

    habe mein Programm jetzt etwas geändert. Ich schreibe das globale Passwort jetzt in die Registry, da mir das noch sicherer und einfacher vorkommt. Jedoch habe ich auch hier ein Problem. Das Auslesen des Passwortes aus der Registry funktioniert wunderbar. Wenn ich das globale Passwort dann im Programm ändere bekomme ich ebenfalls keine Fehlermeldung. Starte ich das Programm jedoch neu, so bekomme ich folgende Fehlermeldung: <b>Input is not a valid MIME 64 Base 64 Format.</b> Leider kann ich mit dieser Fehlermeldung nicht sehr viel anfangen.<br>
    Kann mir jemand helfen. Ich denke mal, dass Hagen eine Antwort darauf weiss.<br>
    Hier zeige ich noch mal den von mir erstellten Code auf den es im wesentlichen ankommt:<br>

    --------Hier wird das Passwort aus der Registry abgefragt---------<br>

    procedure TPasswordDlg.FormCreate(Sender: TObject);<br>
    var Reg_Eintrag: TRegIniFile;<br>
    const schluessel='123'; // Codierungsschlüssel<br>
    begin<br>
    CipherManager.InitKey(schluessel, nil); // den Schlüssel initialisieren<br>
    <br>
    Reg_Eintrag:= TRegIniFile.Create('Software\PasswordBox_1');// Eintrag erzeugen oder öffnen<br>
    try<br>
    reg_passwd:=Reg_Eintrag.ReadString('pwd', 'pwd', '-'); // Passwort auslesen<br>
    reg_passwd:=CipherManager.DecodeString(reg_passwd) ; // Eintrag decodieren<br>
    passwd:=reg_passwd; // Eintrag retten, zum späteren Vergleich<br>
    reg_passwd:=CipherManager.EncodeString(reg_passwd) ; // Eintrag wieder codieren<br>
    Reg_Eintrag.WriteString('pwd', 'pwd', reg_passwd); // codiertes Password zurückschreiben<br>
    finally<br>
    Reg_Eintrag.Free; // Registry freigeben<br>
    end;<br>
    end;<br>

    -------Hier wird im Programm ein neues Password festgelegt--------<br>

    procedure TForm2.SpeedButton2Click(Sender: TObject);<br>
    var Reg_Eintrag: TRegIniFile;<br>
    reg_passwd: String; // Password-Eintrag in der Registry<br>
    const schluessel='123'; // Codierungsschlüssel<br>
    begin<br>
    CipherManager.InitKey(schluessel, nil); // den Schlüssel initialisieren<br>
    <br>
    if MaskEdit1.Text <> '' then // Testen, ob überhaupt ein Zeichen eingegeben wurde<br>
    begin<br>
    if MaskEdit1.Text = MaskEdit2.Text then // wenn Passwörter übereinstimmen<br>
    begin<br>
    Reg_Eintrag:= TRegIniFile.Create('Software\PasswordBox_1');// Eintrag erzeugen oder öffnen<br>
    try<br>
    Reg_Eintrag.WriteString('pwd', 'pwd', MaskEdit2.Text);<br>
    reg_passwd:=Reg_Eintrag.ReadString('pwd', 'pwd', '-'); // Passwort auslesen<br>
    <b>reg_passwd:=CipherManager.DecodeString(reg_pass wd); // Eintrag decodieren</b><br>
    Reg_Eintrag.WriteString('pwd', 'pwd', reg_passwd);<br>
    finally<br>
    Reg_Eintrag.Free; // Datei freigeben<br>
    end;<br>
    end;<br>
    end;<br&gt

    Comment


    • #3
      Hallo Leute,

      mal wieder konnte ich das Problem eigenständig lösen.
      Manchmal sieht man halt selber nicht mehr richtig durch. Das Speichern in der Registry funktioniert natürlich problemlos. Wenn man genau hinschaut, versuche ich das neue Passwort zu decodieren, anstatt es zu codieren. Die markante Stelle habe ich mal fett geschrieben.
      Also war alles nur halb so wild.

      mfg

      Torste

      Comment


      • #4
        Macht es dir was aus, wenn du den Code für dein Hauptpasswort greigibt :-). ich suche nämlich sowas noch für mein Programm. Es ist kein Passwortmanager :-).

        Enjoy Uw

        Comment


        • #5
          Hallo Uwe!

          Frag doch einfach mal per E-Mail bei mir an. Ich bin recht selten in diesem Forum.
          Dann lässt sich da bestimmt was machen

          mfg

          Torste

          Comment


          • #6
            Uuuups, habe doch glatt die E-Mail-Adresse vergessen

            <b>[email protected]</b>

            mfg

            Torste

            Comment

            Working...
            X