Hallo.
Ich versuche eine Datei zeilenweise zu verschlüsseln und später ausgesuchte Zeilen aus der Datei zu entschlüsseln.
Ich kann es per Datei öffnen und zeilenweise lesen, bzw. wie hier per StringList realisieren.
Beide Fälle funktionieren sehr gut.
Allerdings nur wenn ich die ganze Datei zeilenweise verschlüssele und auf dem gleichen Weg entschlüssele.
Hier mein Code:
Delphi-Quellcode:
procedure TForm1.ButtonDCPEncryptClick(Sender: TObject);
var
Cipher : TDCP_Cipher;
DateiName : string;
Liste : TStringList;
ListeCr : 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;
try
DateiName := ExtractFileName(EditDatei.Text);
SaveDialog1.Filename := DateiName;
SaveDialog1.Filter := 'Alle-Dateien|*.*;';
SaveDialog1.InitialDir := ExtractFilePath(Application.ExeName);
if SaveDialog1.Execute then
begin
Liste := TStringlist.Create;
ListeCr := TStringlist.Create;
Liste.BeginUpdate;
Liste.LoadFromFile(DateiName);
Liste.EndUpdate;
Cipher := TDCP_rijndael.Create(Self);
Cipher.InitStr(EditPasswort.Text,TDCP_sha1);
try
try
for Index := 0 to Liste.Count - 1 do
ListeCr.Add(Cipher.EncryptString(Liste.Strings[Index]));
except
end;
finally
Cipher.Burn;
Cipher.Free;
end;
ListeCr.SaveToFile(SaveDialog1.Filename);
end;
finally
FreeAndNil(Liste);
FreeAndNil(ListeCr);
end;
EditDatei.Text := '';
MessageBox(0, 'DONE' ,'Hinweis !' ,MB_ICONWARNING);
end;
Decrypt halt mit der gleichen Routine nur die Zeile anders.
ListeCr.Add(Cipher.DecryptString(Liste.Strings[Index]));
Das Problem ist, ich möchte die Datei verschlüsseln aber so dass ich danach eine Zeile aus der Datei raus kopiere und die eine Zeile dann entschlüssele.
Etwa. so.
Ich habe eine ini Datei (Datei ist recht groß. ca. 1000 Zeilen oder auch mehr) die verschlüssele ich.
Ich möchte aber nur gewisse Werte aus de Datei entschlüsseln.
Sagen wir ein Wert in der Zeile 33 und ein Wert aus der Zeile 177.
Meine Entschlüsselung der Zeile realisiere ich so:
Delphi-Quellcode:
procedure TForm1.ButtonDecryptStringClick(Sender: TObject);
var
Cipher : TDCP_Cipher;
begin
Cipher:= TDCP_rijndael.Create(Self);
Cipher.InitStr(EditPasswort.Text,TDCP_sha1);
Edit1.Text := Cipher.DecryptString(Edit2.Text);
Cipher.Burn;
Cipher.Free;
end;
Wenn ich aber die gewollten Zeilen entschlüssele kommt nur Müll raus.
Ich glaube es hängt irgendwie mit den Zeilenumbrüchen zusammen.
Leider übersteigt es mein Können.
Könnt Ihr mir helfen das Problem zu lösen.
Noch ein Beispiel.
Meine Datei (Ausschnitt)
OldStyleTree=0
autotreechange=0
DirBrackets=1
ShowParentDirInRoot=0
SortDirsByName=1
Nach der Verschlüsselung
pxEReG8XB1dTh2W+yUk=
XAGbX+ByEUrrMshUwOB/PA==
KqjalzvrAjYfOieO/A==
PC0Db1r9O2w22yO3Rh+gTXLPwVxN
YDwPxwqArrDKCQpGdRHUCA==
Wenn ich nun die 4-te Zeile entschlüssele, bekommen ich das hier raus
ÔEO›y·‡òœÇâ_Öoot=0
es sollte aber das rauskommen
ShowParentDirInRoot=0
Eventuell andere Vorschläge wie ich es realisieren kann schaue ich mir gerne an.
Ich freue mich über jede Hilfe.
Ach ja.
Ich habe keine Möglichkeit die Datei komplett zu entschlüsseln, Zeile zu lesen und dann zu löschen.
Es sollte schon so funktionieren wie ich es geschildert habe.