Einzelnen Beitrag anzeigen

Sonic-Y3k

Registriert seit: 16. Sep 2007
Ort: Hamburg
3 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Frage Betreffs einer simplen Verschlüsselung

  Alt 18. Dez 2008, 15:24
Hi,
ich habe folgendes Denkproblem, ich würde gerne mit einem Filestream jeweils in kleinen Blöcken Datein, egal welcher Art laden und die Zeichen mittels Verschiebung ändern.
Leider kommt bei mir immer nur Quatsch bei raus, vlt. könnt ihr mir helfen.

Gruß,

Delphi-Quellcode:
unit UnitMainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TMainForm = class(TForm)
    ButtonEncrypt: TButton;
    OpenDialogEncrypt: TOpenDialog;
    Memo1: TMemo;
    Button1: TButton;
    ProgressBar1: TProgressBar;
    function Encode(what: string; key: Integer): WideString;
    function Decode(what: string; key: Integer): WideString;
    function GenerateKey: Integer;
    procedure ButtonEncryptClick(Sender: TObject);
    procedure HandleFile(done:Longint; Filename: String);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

function TMainForm.Encode(what: string; key: Integer): WideString;
var
  i, o: integer;
  res: string;
begin
  i:= 0;
  while i < length(what)-1 do
  begin
    o:= ord(what[i])+key;
    if o > 255 then
      o := o-255;

    res := res+chr(o);
    if what[i+1] = 'then
      i:= length(what)
    else
      inc(i);
  end;
  Result:= res;
end;

function TMainForm.Decode(what: string; key: Integer): WideString;
var
  i, o: integer;
  res: string;
begin
  for i:=0 to length(what)-1 do
  begin
    o:= ord(what[i])-key;
    if o < 0 then
      o := o+255;

    res := res+chr(o);
  end;
  Result:= res;
end;

function TMainForm.GenerateKey: Integer;
begin
  randomize;

  Result:= random(79)+20;
end;

procedure TMainForm.Button1Click(Sender: TObject);
const
  BufferSize= 1024;
var
  WStream,Stream: TFileStream;
  d,Buffer: WideString;
  done: LongInt;
  Key: Integer;
begin
  if OpenDialogEncrypt.Execute then
  try
    Stream := TFileStream.Create(OpenDialogEncrypt.FileName, fmOpenRead);
    WStream := TFileStream.Create(OpenDialogEncrypt.FileName+'.txt', fmOpenWrite or fmCreate);

    Done:= 2;
    Stream.Read(Key, SizeOf(2));
    while (done < Stream.Size) do
    begin
      Stream.Seek(done, soBeginning);
      Stream.Read(Buffer[1], BufferSize);
      done := done+BufferSize;
      d:= Decode(Buffer, Key);
      WStream.Write(d[1], length(d));
    end;
  finally
      Stream.Free;
      WStream.Free;
  end;
end;

procedure TMainForm.ButtonEncryptClick(Sender: TObject);
begin
  if MainForm.OpenDialogEncrypt.Execute then
  begin
    HandleFile(0, OpenDialogEncrypt.Filename);
  end;
end;

procedure TMainForm.HandleFile(done:Longint; Filename: String);
const
  BufferSize = 1024;
var
  Stream, WStream: TFileStream;
  Buffer,d,Key: String;
  s, k: WideString;
  i: integer;
begin

  try
    SetLength(Buffer, BufferSize);
    Stream := TFileStream.Create(Filename, fmOpenRead);
    WStream := TFileStream.Create(Filename+'.txt', fmOpenWrite or fmCreate);

    Key := IntToStr(GenerateKey);
    WStream.Write(Key[1], 1);
    WStream.Write(Key[2], 1);
    WStream.Seek(2, soBeginning);
    done := 0;

    ProgressBar1.Max :=Stream.Size;
    ProgressBar1.Position := 0;
    ProgressBar1.Min := 0;

    while (done < Stream.Size) do
    begin
      Stream.Seek(done, soBeginning);
      Stream.Read(Buffer[1], BufferSize);
      done := done+BufferSize;
      ProgressBar1.Position := done;
      d:= Encode(Buffer, StrToInt(Key));
      WStream.Write(d[1], length(d));
    end;

  finally
      Stream.Free;
      WStream.Free;
  end;
end;

end.
Angehängte Dateien
Dateityp: rar crypto_shit_852.rar (222,8 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat