Gekürzt ergibt dein ButtonDCPEncryptClick also folgenden Verschlüsselungscode?
Delphi-Quellcode:
Cipher := TDCP_rijndael.Create(Self);
try
Cipher.InitStr(EditPasswort.Text, TDCP_sha1);
Cipher.EncryptString('1. Zeile'); // fällt dir was auf?
Cipher.EncryptString('2. Zeile');
Cipher.EncryptString('3. Zeile');
Edit2.Text := Cipher.EncryptString(Edit1.Text);
Cipher.Burn;
finally
Cipher.Free;
end;
Im Vergleich zur Entschlüsselung sieht der erstmal "fast" OK aus und funktioniert es auch, wenn du beide Codes zur Ver- und Entschlüsselung hintereinander ausführst?
Du müsstest also eigentlich bei jedem Schleifendurchlauf den Chipser neu initialiiseren (InitStr), oder beim Auslesen auch erstmal alle vorherrigen Zeilen entschlüsseln.
(ich glaub nur nicht ganz, daß das der Sicherheit zuträglich ist)
PS: Hier noch ein paar Anmerkungen im Code.
Delphi-Quellcode:
procedure TForm1.ButtonDCPEncryptClick(Sender: TObject);
var
Cipher : TDCP_Cipher;
DateiName : string;
Liste : TStringList;
index : Integer;
begin
{Datei zeilenweise einlesen und mit DCPCrypt verschlüsseln **********}
if EditDatei.Text = '' then
begin
MessageBox(0, 'Zuerst eine Datei wählen.' ,'Hinweis !' ,MB_ICONWARNING);
exit;
end;
Liste := TStringlist.Create; // das gehört vor das TRY !!!
try
DateiName := ExtractFileName(EditDatei.Text);
SaveDialog1.Filename := DateiName;
SaveDialog1.Filter := 'Alle-Dateien|*.*;';
SaveDialog1.InitialDir := ExtractFilePath(Application.ExeName);
if SaveDialog1.Execute then
begin
Liste.BeginUpdate;
Liste.LoadFromFile(DateiName);
Liste.EndUpdate;
Cipher := TDCP_rijndael.Create(Self);
try
Cipher.InitStr(EditPasswort.Text,TDCP_sha1); // das kommt nach das TRY !!!
//try
for Index := 0 to Liste.Count - 1 do
Liste.Strings[Index] := Cipher.EncryptString(Liste.Strings[Index]); // eine zweite Liste ist hier nicht unbedingt nötig, da alles auch in Einer gemacht werden kann
//except
// Warum ignorierst/verwirfst du einfach so fahrlässig eine Fehlermeldung und behauptest am Ende (DONE) auch noch daß alles ordnunggemäß verschlüsselt wurde?
// Und kommt es denn oft vor, daß es hier knallt?
//end;
Cipher.Burn; // das davor
finally
Cipher.Free;
end;
Liste.SaveToFile(SaveDialog1.Filename);
end;
finally
Liste.Free; // Free reicht eigentlich, aber das FreeAndNil ist zumindestens kein Fehler.
end;
EditDatei.Text := '';
MessageBox(0, 'DONE' ,'Hinweis !' ,MB_ICONWARNING);
end;