Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#2

AW: DCPCrypt Datei zeilenweise verschlüsseln.

  Alt 19. Jun 2014, 17:51
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (19. Jun 2014 um 17:58 Uhr)
  Mit Zitat antworten Zitat