AGB  ·  Datenschutz  ·  Impressum  







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

Fragen zu TFileStream

Ein Thema von Dbof · begonnen am 6. Sep 2008 · letzter Beitrag vom 13. Okt 2008
 
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#7

Re: Fragen zu TFileStream

  Alt 13. Okt 2008, 17:29
So sollte es gehen (übrigens auch mit Delphi 2009):

Delphi-Quellcode:
procedure EncryptFile(XFile, KFile: String);
var
  fkey, fxfile: TFilestream;
  keys: array[0..524287] of Byte; // deine Menge weniger 1
  i: Cardinal;
  buffer: Byte;
begin
  fkey := TFileStream.Create(kfile, fmOpenRead);
  fkey.Read(keys, 524288); // nun wieder vollzählig
  fkey.Free; // wird nicht mehr benötigt, da im Speicher

  fxfile := TFileStream.Create(xFile, fmOpenReadWrite);
  for i := 0 to fxfile.Size-1 do
  begin
    fxfile.Read(buffer, 1);
    fxfile.Position := fxFile.Position - 1;
    buffer := buffer XOR keys[i mod 524287];
    fxFile.Write(buffer, 1); // XOR
  end;
  fxfile.Free;
end;
Wesentlich performanter und mit unterschiedlichen Schlüsseldateilängen geht das aber so (funktioniert nur, wenn die zu verschlüsselnde Datei komplett in den Speicher geht!):

Delphi-Quellcode:
procedure EncryptFile(const XFile, KFile: String);
var
  fileStream: TFilestream;
  memStream: TMemoryStream;
  keys: array of Byte;
  keySize: Cardinal;
  i: Cardinal;
  buffer: Byte;
begin
  { Schlüsseldatei in Byte-Array einlesen }
  fileStream := TFileStream.Create(kfile, fmOpenRead);
  try
    keySize := fileStream.Size;
    SetLength(keys, keySize);
    fileStream.Read(keys, keySize);
  finally
    fileStream.Free;
  end;

  memStream := TMemoryStream.Create;
  try
    { xFile Datei in MemoryStream kopieren }
    fileStream := TFileStream.Create(xFile, fmOpenRead);
    try
      memStream.CopyFrom(fileStream, fileStream.Size);
      memStream.Position := 0; // wieder auf Start setzen
    finally
      fileStream.Free;
    end;

    fileStream := TFileStream.Create(xFile, fmOpenWrite);
    try
      for i := 0 to memStream.Size - 1 do
      begin
        memStream.Read(buffer, 1);
        buffer := buffer XOR keys[i mod keySize]; // XOR
        fileStream.Write(buffer, 1);
      end;
    finally
      fileStream.Free;
    end;
  finally
    memStream.Free;
  end;
end;
Uwe Raabe
  Mit Zitat antworten Zitat
 


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 11:20 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