Einzelnen Beitrag anzeigen

TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: DEC Verschlüsselung beim Speichern einer Datei

  Alt 18. Jun 2009, 07:59
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
  Mit Zitat antworten Zitat