![]() |
AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units
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. |
AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units
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... |
AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units
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. |
AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units
Geht das nicht? :(
|
AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units
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. :zwinker:
Delphi-Quellcode:
procedure DecodeFile(const SourceFileName, DestFileName: string;
const Progress: IDECProgress = nil); |
AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units
Dass das da drin steht weiß ich aber ich habe keine Ahnung wie man das benutzt.
In den Demos steht davon auch nix. |
AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units
Beispiel:
Delphi-Quellcode:
Und dann Self in als Interface für den Callback reingeben.
type
TForm1 = class(TForm, IDECProgress) ... private procedure Process(const Min, Max, Pos: Int64); stdcall; end; 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
Delphi-Quellcode:
in die eigenen Methoden mit einbauen.
; const Progress: IDECProgress = nil
|
AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units
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; |
AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units
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:
Beschweren wird sich auch immer wer, da es nie Jedem gerecht gemacht werden kann, bei all den Möglichkeiten.
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; * 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 |
AW: Dateien verschlüssen mit Wolgang Ehrhardts Crypt-Units
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz