![]() |
Re: VerschlüsselungsProgramm
Zitat:
Aber das mit den Streams hab ich noch nicht so ganz verstanden, beim einzigen Beispiel das ich gesehen habe wo eine Datei in einen Stream geladen wurde, war die Datei durch einen Record angelegt, so das die Strukturen des Records in den Stream geladen wurden. Bei meinem Programm sind die Strukturen ja unbekannt, wie geht das da? |
Re: VerschlüsselungsProgramm
Hai Sko,
hier einmal ein ungetestetes Beispiel. Das sollte man wenn möglich natürlich in einen Thread auslagern ;-)
Delphi-Quellcode:
Wenn ich es noch richtig im Kopf habe wurde von Hagen bzw. Luckie einmal eine von TStream abgeleitete Klasse TStreamProgressAdapter erstellt welche ein Ereigniss OnProgress besitzt um damit zum Beispiel eine Progressbar steuern zu können.
procedure TFRM_Main.btn_TestClick(Sender: TObject);
var DefCipherClass: TCipherClass; quelle: TFileStream; ziel: TMemoryStream; buffer: Pointer; Blockgroesse: integer; Laenge: integer; quelldatei: string; zieldatei: string; begin quelldatei := 'c:\blubb.txt'; zieldatei := 'c:\blubb.enc'; Blockgroesse := 1024; DefCipherClass := TCipher_Blowfish; quelle := TFileStream.Create(quelldatei, fmOpenRead or fmShareDenyNone); try ziel := TMemoryStream.Create; try with DefCipherClass.Create('', nil) do begin Mode := cmCBC; InitKey('blubb', nil); GetMem(Buffer, Blockgroesse); try while (quelle.Position < quelle.Size) do begin if (quelle.Size - quelle.Position > Blockgroesse) then begin Laenge := Blockgroesse end else begin Laenge := quelle.Size - quelle.Position end; quelle.ReadBuffer(Buffer^, Laenge); EncodeBuffer(Buffer^, Buffer^, Laenge); ziel.WriteBuffer(Buffer^, Laenge); // Hier könntest Du die Progessbar positionieren. end; finally FreeMem(Buffer); end; ziel.Position := 0; ziel.SaveToFile(zieldatei); end; finally ziel.Free; end; finally quelle.Free; end; end; |
Re: Arbeiten mit dem DEC
Danke!
Es funktioniert :thumb: Ich hab nur die Blockgröße etwas geändert, weil es sonst sehr lange dauert bis etwas größere Dateien ver-/entschlüsselt sind. |
Re: Arbeiten mit dem DEC
Zitat:
Gruß Hagen |
Re: Arbeiten mit dem DEC
Ich hab sie nur vergrößert (20480) das müsste doch gehen, oder?
|
Re: Arbeiten mit dem DEC
Zitat:
Am besten ist es aber wenn du gleiche TCipher.EncodeStream() benutzt. Als Stream benutzt du dann den TProgressStreamAdapter hier aus dem Forum um deine ProgressBar einzubinden. Die Methoden .EncodeStream() und .DecodeStream() übernehmen dann den Rest für dich. Gruß Hagen |
Re: Arbeiten mit dem DEC
also, das ganze sieht jetz so aus:
Delphi-Quellcode:
EDIT: Ich hab den Download wieder gelöscht, da ich einen Schwerwiegenden Fehler entdeckt habe:
var
Form1: TForm1; Filename: string; crypt: string; Algorithmus: TCipherClass; quelle: TFileStream; ziel: TMemoryStream; buffer: Pointer; Blockgroesse: integer; Laenge: integer; Start: TTime; Ende: TTime; Lauf: TTime; Verb: real; Groesse: real; Versch: real; . . . begin Blockgroesse := 81920; if ComboBox1.text = 'Blowfish' then Algorithmus := TCipher_Blowfish; if ComboBox1.text = 'Rijndael' then Algorithmus := TCipher_Rijndael; if ComboBox1.text = 'Sapphire II' then Algorithmus := TCipher_Sapphire; quelle := TFileStream.Create(Filename, fmOpenRead or fmShareDenyNone); Start:=Time; Label7.caption:='00:00:00'; try ziel := TMemoryStream.Create; try with Algorithmus.Create(Edit3.text, nil) do begin Mode := cmCBC; InitKey(Edit3.text, nil); GetMem(Buffer, 81920); try while (quelle.Position < quelle.Size) do begin if (quelle.Size - quelle.Position > Blockgroesse) then begin Laenge := Blockgroesse end else begin Laenge := quelle.Size - quelle.Position end; quelle.ReadBuffer(Buffer^, Laenge); EncodeBuffer(Buffer^, Buffer^, Laenge); ziel.WriteBuffer(Buffer^, Laenge); ProgressBar1.Min:=0; ProgressBar1.Max:=quelle.size; ProgressBar1.Position:=Quelle.Position; Form1.Refresh; Lauf:=Time; Groesse:=(quelle.Size/1024)/1024; Verb:=((quelle.size-quelle.position)/1024)/1024; Versch:=((Quelle.position)/1024/1024); Label8.caption:=RealtoStr(Groesse); Label7.caption:=TimeToStr(Lauf-Start); Label6.caption:=RealToStr(Verb); Label10.caption:=RealToStr(Versch); end; finally FreeMem(Buffer); end; ziel.Position := 0; ziel.SaveToFile(crypt); end; finally ziel.Free; end; finally quelle.Free; end; Ich hab versucht eine 300 MB Datei zu verschlüsseln, aber mit der Zeit ging das Verschlüsseln immer langsamer, bis es nach 18 Minuten bei etwa 60 % garnicht mehr weiter ging. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:49 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-2025 by Thomas Breitkreuz