Einzelnen Beitrag anzeigen

IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
83 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

DCPCrypt Datei zeilenweise verschlüsseln.

  Alt 19. Jun 2014, 17:58
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.

Geändert von IMPEGA (19. Jun 2014 um 18:06 Uhr)
  Mit Zitat antworten Zitat