Wie bekommt man es hin, nur einen Teil einer sehr großen Datei auszutauschen bzw. zu schreiben, ohne gleich die gesamte Datei neu schreiben zu müssen?
Das ist total easy:
Delphi-Quellcode:
const
BLOCKSIZE = 1024
var
stream : TStream;
s : AnsiString;
begin
stream := TFileStream.Create('datei.vhd', fmOpenReadWrite or fmShareDenyWrite);
try
SetLength(s, BLOCKSIZE);
stream.ReadBuffer(s[1], Length(s)); // Block einlesen
s := XORString(s, 'geheime passphrase zur Verschlüsselung'); // ver- oder entschlüsseln
stream.Position := 0; // zurück auf Anfang
stream.WriteBuffer(s[1], Length(s)); // Block überschreiben
finally
stream.Free;
end;
end;
Der Code könnte kleine Fehler enthalten da ungetestet
Die Funktion XORString ist eine einfache XOR-Verschlüsselung.
Delphi-Quellcode:
function XORString(const text, key:AnsiString):AnsiString;
var
i, j, keylen : Integer;
begin
SetLength(Result, length(text));
j := 1;
keylen := Length(key);
for i := 1 to Length(text) do
begin
Result[i] := chr(ord(text[i]) xor ord(key[j]));
Inc(j);
if j > keylen then j := 1;
end;
end;