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
 
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 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
 


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 10:35 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