Einzelnen Beitrag anzeigen

Predator
(Gast)

n/a Beiträge
 
#1

Warum Zugriffsverletzung ???

  Alt 27. Okt 2003, 17:19
moin Jungs,

Ich programmiere gerade ein Verschlüsselungsproggi mit Delphi und DEC.

Encodieren kann ich schon. Benutze Rijndael mit SHA_1

so ich hab die Encodierungsroutine so aufgebaut:

Delphi-Quellcode:
function Decoding(Input,Output,PW: string; Cipher: TCipherClass; hWnd: THandle): Boolean;
var
  fs,dest: TFileStream;
  Len: Integer;
  Buffer: Pointer;
begin
  result := false;
  fs := TFileStream.Create(Input, fmOpenRead);
  if Assigned(fs) then
begin //<<<< Ab hier meldet Debugger den Fehler
  dest := TFileStream.Create(Output, fmCreate);
  if Assigned(dest) then
begin
try
  fs.Seek(sizeof(TFileHeader), soFromBeginning);
  DefCipherClass := Cipher;
  GetMem(Buffer, 1024);
try
  with DefCipherClass.Create(PW, nil) do
begin
  Mode := cmCBC;
  InitKey(PW, nil);
  while (fs.Position < fs.Size ) do
begin
  if fs.Size - fs.Position > BlockSize then
  Len:= BlockSize
else
  Len := fs.Size - fs.Position;
  fs.ReadBuffer(Buffer^, Len);
  DecodeBuffer(Buffer^, Buffer^, Len);
  dest.WriteBuffer(Buffer^, Len);
end;
end;
finally
  FreeMem(Buffer);
end;
finally
  FreeAndNil(dest);
end;
end;
end;
end;
so aufgerufen wird diese Durch einen Button:

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
 FileHeader: TFileHeader;
 CipherClass: TCipherClass;
 HashClass: THashClass;
 HashEncodedFile: string;
begin
 if FileExists(Edit1.Text) then
begin
 ReadHeader(FFilename, FileHeader);
 CipherClass := FileHeader.FCipherClass;
 HashClass := FileHeader.FHashClass;
 HashEncodedFile := FileHeader.FHashString;
 Decoding(Edit1.Text,Edit2.Text,Edit3.Text, CipherClass, Handle);
end
else
 ShowMessage('Fehler');
end;
So der FileHeader ist genauso wie bei Luckie's FileCrypter.

die function ReadHeader sieht so aus:

Delphi-Quellcode:
function ReadHeader(Filename: string; FileHeader: TFileHeader): Boolean;
var
  fs: TFileStream;
begin
  result := false;
  fs := TFileStream.Create(Filename, fmOpenRead);
  if Assigned(fs) then
begin
try
  fs.Read(FileHeader, sizeof(TFileHeader));
finally
  FreeAndNil(fs);
end;
end
else
begin
  ShowMessage('Fehler');
exit;
end;
  result := true;
end;
wenn ich jetzt ausführe kommt genau diese Meldung beim encodieren:

"Zugriffsverletzung bei Adresse 00403433 im Modul 'Project1.exe'. Lesen von Adresse 0110005F"

bitte um hilfe

danke im voraus.

cu
Predator
  Mit Zitat antworten Zitat