AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units
Thema durchsuchen
Ansicht
Themen-Optionen

Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units

Ein Thema von DieDolly · begonnen am 16. Dez 2020 · letzter Beitrag vom 7. Jan 2021
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#11

AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units

  Alt 16. Dez 2020, 14:04
Klappt bisher genau so wie gewünscht.

Eine kleine Extra-Unit erlaubt mir dann an anderer Stelle einen 1-Zeiler als Aufruf. Die Extra-Unit ist aber ausbaufähig was doppelten Code angeht.
Dieses .encrypted.txt und .decrypted.txt ist nur eine kleine Hilfe für mich bis ich alles richtig habe.

Delphi-Quellcode:
unit Utils.DEC.Crypt;

interface

uses
 System.SysUtils, System.Classes, DECCipherBase, DECCiphers, DECCipherFormats;

type
 TDECCryptUtils = record
 private
  //
 public
  class function AESFileEncrypt(const FileName, Password: string): string; static;
  class function AESFileDecrypt(const FileName, Password: string): string; static;
 end;

implementation

class function TDECCryptUtils.AESFileEncrypt(const FileName, Password: string): string;
var
 Cipher: TCipher_AES;
begin
 Cipher := TCipher_AES.Create;
 try
  try
   // Schlüssel, Initialisierungsvektor, Füllwert um auf Blockgröße aufzufüllen
   Cipher.Init(Password, #1#2#3#4#5#6#7#64, 0);
   Cipher.Mode := cmCBCx;
   // Klartextdatei, verschlüsselte Datei
   Cipher.EncodeFile(FileName, FileName + '.encrypted.txt');
  except
   //
  end;
 finally
  Cipher.Free;
 end;
end;

class function TDECCryptUtils.AESFileDecrypt(const FileName, Password: string): string;
var
 Cipher: TCipher_AES;
begin
 Cipher := TCipher_AES.Create;
 try
  try
   // Schlüssel, Initialisierungsvektor, Füllwert um auf Blockgröße aufzufüllen
   Cipher.Init(Password, #1#2#3#4#5#6#7#64, 0);
   Cipher.Mode := cmCBCx;
   // Klartextdatei, verschlüsselte Datei
   Cipher.DecodeFile(FileName, FileName + '.decrypted.txt');
  except
   //
  end;
 finally
  Cipher.Free;
 end;
end;

end.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.824 Beiträge
 
Delphi 12 Athens
 
#12

AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units

  Alt 16. Dez 2020, 14:23
Schön, dass DEC nützlich ist.

Evtl. hält das sogar in GetIt EInzug, da laufen aber nich die Diskussionen
wegen Exportbeschränkungen für cryptographische Algorithmen.
Wenn das so nicht klappt, wird's eine DEC Light für GetIt geben wo dann
halt alles außer den Verschlüsselungsalgorithmen drin ist.
Auch Hashes, CRCs und Zufallszahlengeneratoren sind für den einen oder
anderen nützlich...
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#13

AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units

  Alt 16. Dez 2020, 14:27
Eine letzte Frage habe ich noch da ich gerade gesehen habe dass man auch den Fortschritt anzeigen lassen kann.
Wie funktioniert das? Eine ProgressBar brauche ich nicht. Ich würde mir gerne ausgeben lassen, wieviele Bytes von der Datei schon verschlüsselt wurden.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#14

AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units

  Alt 16. Dez 2020, 22:52
Geht das nicht?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units

  Alt 17. Dez 2020, 00:32
Schau doch mal in TCipher_AES?

Ob es im Constructor oder eine Methode einen Setter gibt, oder vielleicht gibt es auch ein Property, wo man eine Ereignismethode oder ein Interface zuweisen kann.


[Edit]
Es gibt ein IDECProgress, aber scheinbar nur beim Ver-/Entschlüsseln von Streams
und im Prinzip auch von Dateien (TFileStream).

[Edit2]
Wer die das CodeInsight lesen kann, ist klar im Vorteil.
Delphi-Quellcode:
procedure DecodeFile(const SourceFileName, DestFileName: string;
                     const Progress: IDECProgress = nil);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (17. Dez 2020 um 01:19 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#16

AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units

  Alt 17. Dez 2020, 07:20
Dass das da drin steht weiß ich aber ich habe keine Ahnung wie man das benutzt.
In den Demos steht davon auch nix.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units

  Alt 17. Dez 2020, 11:09
Beispiel:
Delphi-Quellcode:
type
  TForm1 = class(TForm, IDECProgress)
    ...
  private
    procedure Process(const Min, Max, Pos: Int64); stdcall;
  end;
Und dann Self in als Interface für den Callback reingeben.



Man kann sich auch ein eigenes Objekt/Interface dafür bauen.
TForm, bzw. alle TComponent haben bereits eine Interfacebehandlung dind, welche standardmäßig keine Referenzzählung besitzt. (Controlle über die Freigabe liegt weiter beim Owner und/oder Free)

Und wer selber kein komplettes IInterface bauen will:
TInterfacedObject
TInterfacedPersistent
...


Und da du keine Objektinstanz zur Verfügung hast, sondern nur Prozeduren, bzw. nur statische Methoden,
würde ich das Interface durchreichen, also ; const Progress: IDECProgress = nil in die eigenen Methoden mit einbauen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (17. Dez 2020 um 11:16 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#18

AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units

  Alt 17. Dez 2020, 11:52
Verstehe ich nicht. Das funktioniert so nicht. Bin ich zu dumm dafür?

Wieso kann das nicht einfach eine normale CallBacl-Funktion sein? Irgendwie viel zu kompliziert das DEC was den Progress angeht.

Delphi-Quellcode:
procedure TDECCryptFunctions.Process(const Min, Max, Pos: Int64);
begin

end;

class function TDECCryptUtils.AESFileDecrypt(const FileName, Password: string): string;
var
 Cipher: TCipher_AES;
begin
 Cipher := TCipher_AES.Create;
 try
  try
   // Schlüssel, Initialisierungsvektor, Füllwert um auf Blockgröße aufzufüllen
   Cipher.Init(Password, #1#2#3#4#5#6#7#64, 0);
   Cipher.Mode := cmCBCx;
   // Klartextdatei, verschlüsselte Datei
   Cipher.DecodeFile(FileName, FileName + '.decrypted.txt', Process);
  except
   //
  end;
 finally
  Cipher.Free;
 end;
end;

Geändert von DieDolly (17. Dez 2020 um 12:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units

  Alt 17. Dez 2020, 12:53
Du hast eine Class-Procedure und da es dort keine "Instanz" gibt, hast du da auf Process garkeinen Zugriff.
Und nochmals, hier gibt man eine Interface-"Instanz" rein und keinen "Methoden"-Zeiger. (bei meinem Beispiel mit TForm1 also Form1 bzw. Self)
Du brauchst also erstmal ein Objekt und das muß erzeugt worden sein (Create).
Es wird die Instanz reingegeben und was aufgerufen wird (Process), darum kümmert sich das Interface (IDECProgress).

Callback-Interfaces sind nichts Besonderes und sie sind auch erfolgreich/problemlos sehr weit verbreitet.

Klar, da hier (aktuell) nur eine Methode drin steckt, sieht es "unpraktisch" aus, aber das ändert sich schnell, sobald es etwas "komplexer" wird.
Nur ein Zeiger für mehrere Ereignisse:
Delphi-Quellcode:
type
  IComplexProgress = interface
    procedure Start(const Min, Max: Int64);
    procedure Process(const Pos: Int64; var Cancel: Boolean);
    procedure Stop;
    procedure Error(const Message: string);
  end;
Beschweren wird sich auch immer wer, da es nie Jedem gerecht gemacht werden kann, bei all den Möglichkeiten.
* Callback-Objekt (interface ODER class)
* Prozedur (procedure ODER class procedure static)
* Methode (procedure of object)
* anonyme Methode ODER die beiden Vorherrigen (reference to procedure), aber dafür kann man diese Zeiger "oft" garnicht vergleichen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (17. Dez 2020 um 13:01 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#20

AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units

  Alt 17. Dez 2020, 12:55
Ich verstehe nur Bahnhof. Wo muss ich das denn hinpacken was da oben steht und wie wende ich das an?
Normale CallBacks schickt der Himmel. Interfaces die Hölle.
Ne also wenn das so kompliziert ist, nicht es nicht einmal einen normalen CallBack gibt, dann ist das DEC nix für mich.

Geändert von DieDolly (17. Dez 2020 um 13:01 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz