AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Arbeiten mit dem DEC

Ein Thema von Sko · begonnen am 11. Sep 2005 · letzter Beitrag vom 12. Sep 2005
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Sko
Sko

Registriert seit: 11. Sep 2005
327 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: VerschlüsselungsProgramm

  Alt 11. Sep 2005, 12:30
Zitat von Sharky:
Ach ja,
hatte ich total vergessen:

"Herzlich Willkommen in der Delphi-PRAXiS".
Danke

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?
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#12

Re: VerschlüsselungsProgramm

  Alt 11. Sep 2005, 12:55
Hai Sko,

hier einmal ein ungetestetes Beispiel. Das sollte man wenn möglich natürlich in einen Thread auslagern
Delphi-Quellcode:
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;
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Sko
Sko

Registriert seit: 11. Sep 2005
327 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Arbeiten mit dem DEC

  Alt 11. Sep 2005, 14:10
Danke!

Es funktioniert

Ich hab nur die Blockgröße etwas geändert, weil es sonst sehr lange dauert bis etwas größere Dateien ver-/entschlüsselt sind.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#14

Re: Arbeiten mit dem DEC

  Alt 11. Sep 2005, 14:50
Zitat:
Ich hab nur die Blockgröße etwas geändert
WICHTIG! ist nur das dein Buffer in der Bytegröße ein Vielfaches von TCipher.Context.BlockSize ist. Dies liegt am Padding der Cipher.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von Sko
Sko

Registriert seit: 11. Sep 2005
327 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Arbeiten mit dem DEC

  Alt 11. Sep 2005, 14:54
Ich hab sie nur vergrößert (20480) das müsste doch gehen, oder?
MfG Sko
Zitat von Phoenix:
[OT]Phoenix guckt in die Glaskugel, zuckt mit den Flügelspitzen, krächzt etwas von wegen 'Boden' und 'Scherben' und schubbst die Kugel in Richtung Tischkante.[/OT]
Rockbox
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#16

Re: Arbeiten mit dem DEC

  Alt 11. Sep 2005, 15:25
Zitat:
Ich hab sie nur vergrößert (20480) das müsste doch gehen, oder?
Wenn BufferSize mod Cipher.BlockSize == 0 ist dann ist alles in Ordnung.

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
  Mit Zitat antworten Zitat
Benutzerbild von Sko
Sko

Registriert seit: 11. Sep 2005
327 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Arbeiten mit dem DEC

  Alt 12. Sep 2005, 16:16
also, das ganze sieht jetz so aus:

Delphi-Quellcode:
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 = 'Blowfishthen Algorithmus := TCipher_Blowfish;
    if ComboBox1.text = 'Rijndaelthen Algorithmus := TCipher_Rijndael;
    if ComboBox1.text = 'Sapphire IIthen 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;
EDIT: Ich hab den Download wieder gelöscht, da ich einen Schwerwiegenden Fehler entdeckt habe:
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.
MfG Sko
Zitat von Phoenix:
[OT]Phoenix guckt in die Glaskugel, zuckt mit den Flügelspitzen, krächzt etwas von wegen 'Boden' und 'Scherben' und schubbst die Kugel in Richtung Tischkante.[/OT]
Rockbox
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 00:39 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