![]() |
Rave Datei für Anwender Sperren/Schützen
Bei meiner Anwendung soll ein Report mitgeliefert werden in Form einer *.rav Datei jedoch würde ich gern
verhindern das der Anwender falls er die Rave IDE hat die Datei zu bearbeiten. Naja eine möglichkeit wäre das umbennenen der Dateierweiterung aber das wäre etwas zu simpel, die Report Datei mit in die Exe zupacken würde ich eher ungern machen, daher die Fragen was für möglichkeiten es da gibt. Vielleicht ist es ja möglich die Datei in eine DLL zupacken und diese dann bei bedarf in den Speicher zu laden. Die Anwendung ist mit Delphi 2007 Prof. R2 für Win32 erstellt worden und die Report Datei mit der begelieferten Rave Report Version. |
Re: Rave Datei für Anwender Sperren/Schützen
MNan könnte die Datei verschlüsseln oder aus einer Datenbank laden
|
Re: Rave Datei für Anwender Sperren/Schützen
Zitat:
Die Überlegung die Datei per FileStream in eine eigene Binärdatei zu laden um diese dann später wiederherzustellen kam mir auch schon, nur wollte ich mal die Experten Fragen man muß das Rad ja nicht ständig neu erfinden, hatte auf eine "Fertige" Lösung gehofft. |
Re: Rave Datei für Anwender Sperren/Schützen
Verschlüsseltes Archiv, Filecontainer, ...
|
Re: Rave Datei für Anwender Sperren/Schützen
So ich habe endlich etwas Zeit gefunden, um mich wieder um die Frage zu kümmern wie ich eine 'Rave' Datei schützen kann.
Ich habe folgendes auf die schnelle zusammen geschrieben, soweit funktioniert alles. Ich kann eine Datei packen und diese dann auch wieder entpacken, anschließend ergab ein Dateivergleich mit Total Commander das die Dateien identisch sind. Was ich mich jetzt noch frage ist, ob es noch groß was an dem code auszusetzten gibt oder gar grobe schnitzer drin sind. Morgen schau ich dann noch das ich eine simple Verschlüsselung zusammen gebastelt bekomme, damit man nix mehr erkennen kann falls jemand die Datei mit dem Editor öffnet. Später soll dann die Rave Datei gepackt werden und wird mit dem Installer der Anwendung ausgeliefert, in der Anwendung wird die Datei on-the-fly entpackt und kann dann entsprechend gedruckt werden oder was sonst mit dem Report passieren soll.
Delphi-Quellcode:
unit uMain;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MD5; type tPackFile = record Version : Byte; Password : String[32]; Size : Integer; Package : array of Byte; end; type TForm1 = class(TForm) btnOpen: TButton; OpenDialog: TOpenDialog; edtFile: TEdit; btnCompress: TButton; SaveDialog: TSaveDialog; btnDecompress: TButton; procedure btnOpenClick(Sender: TObject); procedure btnCompressClick(Sender: TObject); procedure btnDecompressClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } NewFile : tPackFile; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btnOpenClick(Sender: TObject); begin //Welche Datei soll gepackt werden? if OpenDialog.Execute then edtFile.Text := OpenDialog.FileName; end; procedure TForm1.btnCompressClick(Sender: TObject); var FStream : TFileStream; FHandle : file of byte; cTmp : byte; ByteIdx : Integer; begin if SaveDialog.Execute then begin //init NewFile.Version := 1; NewFile.Password := MD5Print(MD5File(OpenDialog.FileName)); SetLength(NewFile.Package, 1000000); ByteIdx := 0; //Datei die gepackt werden soll, öffnen und einlesen... System.Assign(FHandle, edtFile.Text); {$I-} Reset(FHandle); {$I+} if IoResult = 0 then begin while not Eof(FHandle) do begin //Zeichen lesen Read(FHandle, cTmp); NewFile.Package[ByteIdx] := cTmp; Inc(ByteIdx); end;{while} System.Close(FHandle); end; //Größe der Datei SetLength(NewFile.Package, ByteIdx); NewFile.Size := Length(NewFile.Package); //Datei speichern... FStream := TFileStream.Create(SaveDialog.FileName, fmCreate or fmShareExclusive); try FStream.WriteBuffer(NewFile.Version, SizeOf(NewFile.Version)); FStream.WriteBuffer(NewFile.Password, SizeOf(NewFile.Password)); FStream.WriteBuffer(NewFile.Size, SizeOf(NewFile.Size)); for ByteIdx := 0 to High(NewFile.Package) do begin FStream.WriteBuffer(NewFile.Package[ByteIdx], SizeOf(NewFile.Package[ByteIdx])); end;{for} finally FStream.Free; end; end;{if} end; procedure TForm1.btnDecompressClick(Sender: TObject); var FStream : TFileStream; Index : Integer; FHandle : file of byte; begin if SaveDialog.Execute then begin //init NewFile.Version := 0; NewFile.Password := ''; NewFile.Size := 0; NewFile.Package := nil; //Datei öffnen und einlesen... FStream := TFileStream.Create(OpenDialog.FileName, fmOpenRead or fmShareExclusive); try FStream.ReadBuffer(NewFile.Version, SizeOf(NewFile.Version)); FStream.ReadBuffer(NewFile.Password, SizeOf(NewFile.Password)); if NewFile.Password = '3b2e0b0079c60f165ce92eb0bce18b5d' then begin FStream.ReadBuffer(NewFile.Size, SizeOf(NewFile.Size)); SetLength(NewFile.Package, NewFile.Size); for Index := 0 to NewFile.Size-1 do begin FStream.ReadBuffer(NewFile.Package[Index], SizeOf(NewFile.Package[Index])); end;{for} end else ShowMessage('File damaged'); //Datei erstellen... System.Assign(FHandle, SaveDialog.FileName); {$I-} Rewrite(FHandle); {$I+} if IoResult = 0 then begin for Index := 0 to High(NewFile.Package) do begin Write(FHandle, NewFile.Package[Index]); end; System.Close(FHandle); end;{if} finally FStream.Free; end; end;{if SaveDialog} end; end. |
Re: Rave Datei für Anwender Sperren/Schützen
Hallo
darf man fragen, warum Du den Aufwand betreiben willst? Ich meine, das ein Anwender, der nicht programmiert, den Rave-Designer hat, ist ja wohl ziemlich ausgeschlossen ;-). Wast hast Du denn so für geheimnisvolle Daten in der Vorlage selbst? Was spricht jetzt wirklich dagegen, den Report mit in der Exe zu integrieren? Im Ravedesigner gibt es noch ein Adminpassword als eigenschaft, ich weiß allerdings nicht, für was die da ist, beschrieben ist sie nicht. Kannst du nur mal merlin17 fragen. Gruß Frank |
Re: Rave Datei für Anwender Sperren/Schützen
Zitat:
Geheimnisvoll sind die Daten auch nicht wirklich da der Anwender diese ja Drucken bzw. als PDF exportieren kann, es geht mir eher darum das ein neugieriger nicht die Daten verändern kann. Mit in die Exe zu kompilieren will ich nicht, da dies die Exe noch mehr vergrößert und der Report auch nicht immer der Software bei liegt, da es sich nur um ein Programm Modul handelt was diesen Report nutzt. Ach ja und als letztes Argument warum ich diesen Aufwand betreibe ist es meine eigene Neugierde zu befriedigen und um sowas mal gemacht zu haben, sprich Lern Effekt. Wer weiß vielleicht kann man das auch für das ein oder andere auch benutzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 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