Vielen dank für das Beispiel juergen, ich habs jetzt hin bekommen, jedoch mußte ich nicht nur in der RCx.pas
die Kompilerschalter aktivieren sondern in den beiden anderen Units auch weil ich ständig Integerüberlaufe
bekommen habe. Die Verschlüsselung scheint jetzt aber zu funktionieren, ich kann mein Rekord speichern
und wenn ich es wieder lade ist das Rekord wieder vollständig hergestellt.
Im grunde fehlte nur WriteSalt und ReadSalt.
Speichern der Datei:
Delphi-Quellcode:
procedure pSaveFile(const sFileName: String; _MyFile: tKeyFile);
var
FStream : TRCxStreamDecorator;
begin
FStream := TRCxStreamDecorator.Create(TFileStream.Create(sFileName, fmCreate or fmShareExclusive));
try
FStream.Password := '1234';
FStream.WriteSalt;
//Header
FStream.WriteBuffer(_MyFile.Header, SizeOf(_MyFile.Header));
//Parameter
FStream.WriteBuffer(_MyFile.Param, SizeOf(_MyFile.Param));
finally
FStream.Free;
end;
end;{pSaveFile}
Öffnen der Verschlüsselten Datei:
Delphi-Quellcode:
procedure pOpenFile(const sFileName: String; Var _MyFile: tKeyFile; Var bError: Boolean);
var
FStream : TRCxStreamDecorator;
begin
//init
_MyFile.Header.FileFormatVersion := 0;
bError := False;
FStream := TRCxStreamDecorator.Create(TFileStream.Create(sFileName, fmOpenRead or fmShareExclusive));
try
try
FStream.Password := '1234';
FStream.ReadSalt;
//Header
FStream.ReadBuffer(_MyFile.Header, SizeOf(_MyFile.Header));
if _MyFile.Header.FileFormatVersion = CurrentVersion then begin
//Parameter
FStream.ReadBuffer(_MyFile.Param, SizeOf(_MyFile.Param));
end
else begin
Application.MessageBox(PWideChar('Die Datei entspricht nicht dem aktuellen Datei-Format ('+IntToStr(CurrentVersion)+')'), 'Fehler', 48);
bError := True;
end;{else}
except
bError := True;
end;{try..except}
finally
FStream.Free;
end;{try..finally}
end;{pOpenFile}
Wie gut bzw. wie sicher die Verschlüsselung jetzt ist, soll mir soweit egal sein. Als Passwort werde ich natürlich
etwas anders nehmen als "1234"
aber mir ging es nur darum die jenigen abzuschrecken die mal probieren wollen
ob man da nicht was manipulieren kann wenn man einen Wert ändert, da in meinem Rekord fast nur Boolschewerte gespeichert
werden, hätte man ja das ein oder andere Byte mal umdrehen können von daher ist das jetzt vollkommen in Ordnung.
Ich bedanke mich bei der tollen hilfe und wünsche noch einen schönen Tag.
mfg
TUX