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>
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>
Comment