AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Rave Datei für Anwender Sperren/Schützen
Thema durchsuchen
Ansicht
Themen-Optionen

Rave Datei für Anwender Sperren/Schützen

Ein Thema von TUX_der_Pinguin · begonnen am 24. Feb 2009 · letzter Beitrag vom 3. Mär 2009
Antwort Antwort
TUX_der_Pinguin

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

Rave Datei für Anwender Sperren/Schützen

  Alt 24. Feb 2009, 14:07
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Rave Datei für Anwender Sperren/Schützen

  Alt 24. Feb 2009, 14:09
MNan könnte die Datei verschlüsseln oder aus einer Datenbank laden
Markus Kinzler
  Mit Zitat antworten Zitat
TUX_der_Pinguin

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

Re: Rave Datei für Anwender Sperren/Schützen

  Alt 24. Feb 2009, 14:14
Zitat von mkinzler:
MNan könnte die Datei verschlüsseln oder aus einer Datenbank laden
Naja aus einer Datenbank laden ist eher nicht möglich, da kein Datenbank System vorhanden ist an der Stelle.
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Rave Datei für Anwender Sperren/Schützen

  Alt 24. Feb 2009, 14:15
Verschlüsseltes Archiv, Filecontainer, ...
Markus Kinzler
  Mit Zitat antworten Zitat
TUX_der_Pinguin

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

Re: Rave Datei für Anwender Sperren/Schützen

  Alt 2. Mär 2009, 14:41
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 = '3b2e0b0079c60f165ce92eb0bce18b5dthen 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.
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Rave Datei für Anwender Sperren/Schützen

  Alt 2. Mär 2009, 18:45
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

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
TUX_der_Pinguin

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

Re: Rave Datei für Anwender Sperren/Schützen

  Alt 3. Mär 2009, 07:14
Zitat von Keldorn:
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
Mir ist schon klar das die Wahrscheinlichkeit gering bis null ist das die Anwender einen Rave-Designer zur hand haben.

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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz