Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi nochmal DEC: Hash wird nicht in Stream geschrieben ??? (https://www.delphipraxis.net/10921-nochmal-dec-hash-wird-nicht-stream-geschrieben.html)

Predator 28. Okt 2003 02:41


nochmal DEC: Hash wird nicht in Stream geschrieben ???
 
moin,

ich wollte gerade die HashWerte vergleichen und siehe da es wird garnichts im header geschrieben.

so sieht die function aus zum einlesen:

Delphi-Quellcode:
function ReadFileHeader(Filename: string; var FileHeader: TFileHeader): Boolean;
var
  SrcStream: TFileStream;
begin
  result := False;
  SrcStream := TFileStream.Create(Filename, fmOpenRead);
  if Assigned(SrcStream) then
  begin
    try
      SrcStream.Read(FileHeader, sizeof(TFileHeader));
    finally
      FreeAndNil(SrcStream);
    end;
  end
  else
  begin
    RaiseLastOSError();
    exit;
  end;
  result := True;
end;
und so sieht der Header aus:

Delphi-Quellcode:
type
     TFileHeader = packed record
       THashString : string[10];
end;
geschrieben wird so:
Delphi-Quellcode:
dest.write(FileHeader, sizeof(TFileHeader));
und das Ergebnis ist, das FileHeader.THashString leer ist.

woran liegt das ? Danke !

Christian Seehase 28. Okt 2003 02:54

Re: nochmal DEC: Hash wird nicht in Stream geschrieben ???
 
Moin Predator,

ich hoffe, Du hast berücksichtigt, dass ein ShortString immer ein Zeichen länger ist, als angegeben.
In Deinem Falle ist THashstring also 11 Zeichen lang, da vor den eigentlichen Daten noch ein Längenbyte kommt.
Wenn Du also etwas einlesen willst, muss das erste Byte die Anzahl der folgenden enthalten.
Ansonsten wären Beispieldaten ganz hilfreich.

BTW:
THashstring finde ich etwas unglücklich gewählt, da es üblich ist Typenbezeichner mit einem T anfangen zu lassen.

Predator 28. Okt 2003 03:12

Re: nochmal DEC: Hash wird nicht in Stream geschrieben ???
 
hmm das versteh ich jetzt irgendwie net.

Beispieldaten hmm wenn du das meinst z.B.:

Delphi-Quellcode:
THashString := 'hjegfralos';
Meinst du ich muss erst die anzahl speichern und dann den string ?

also

Delphi-Quellcode:
len := length(FileHeader.THashString);
dest.write(len, sizeof(len));
und dann

Delphi-Quellcode:
dest.write(FileHeader.THashString, Len);

odr wie meinst du das ? Kannste mal ein Beispiel posten ?

[edit=Daniel B]Delphi-Tags eingefügt. Mfg, Daniel B[/edit]

Christian Seehase 28. Okt 2003 03:27

Re: nochmal DEC: Hash wird nicht in Stream geschrieben ???
 
Moin Predator,

Die Länge wird bei Deinem Code automatisch mitgespeichert (geht aber auch nur mit ShortStrings).
Ich wunderte mich nur darüber, dass der String nach dem Einlesen leer war.
Funktionieren müsste es so, wie Du es geschrieben hast.

Ist denn der Inhalt der Datei richtig?

Predator 28. Okt 2003 08:08

Re: nochmal DEC: Hash wird nicht in Stream geschrieben ???
 
der Inhalt der Datei ist korrekt der Header wird auch übersprungen nur ist FileHeader immer leer.

Predator 28. Okt 2003 08:29

Re: nochmal DEC: Hash wird nicht in Stream geschrieben ???
 
so ich hab das jetzt bissel umgeändert: sieht jetzt so aus:
nach dem fs.Read hab ich noch:

result := FileHeader.FileHashString; eingefügt und beim aufruf:

FileHeader.FileHashString := ReadFileHeader(Edit1.Text, FileHeader);

jetzt hab ich noch irgendwie ein Logikfehler drin. Von was mus ich den Hash haben ? Ich hab den von einer Datei generieren lassen. Diesn speicher ich in der Datei als Prüfsumme. Beim entschlüsseln generiere ich von der verschl. Datei einen Hash Wert und überprüfe ob bei de gleich sind.

Diese sind aber immer anders. Muss ich vom Passwort ein Hash speichern oder wie geht das ?

danke.

Luckie 28. Okt 2003 08:49

Re: nochmal DEC: Hash wird nicht in Stream geschrieben ???
 
Zitat:

Zitat von Predator
Ich hab den von einer Datei generieren lassen. Diesn speicher ich in der Datei als Prüfsumme. Beim entschlüsseln generiere ich von der verschl. Datei einen Hash Wert und überprüfe ob bei de gleich sind.

Diese sind aber immer anders.

Ist auch gut so oder findest du nicht? Immerhin sollte sich die verschlüsselte Datei von der unverschlüsselten unterscheiden oder? Du mußt nvon der verschlüsselten nach dem Entschlüsseln eine Hash erstellen und diuesen mit dem gespeicherten vergleichen. :wink:

Predator 28. Okt 2003 08:54

Re: nochmal DEC: Hash wird nicht in Stream geschrieben ???
 
ahsoo ok noch ne Frage.

Jetz hab ich ne If Abfrage wo die berglichen werden:

Delphi-Quellcode:
if FileHeader.FileHashString <> EncodedHash then
  begin
      Label6.Font.Color := clRed;
      Label7.Font.Color := clRed;

      Label9.Font.Color := clRed;
      Label9.Caption := 'unwahrscheinlich';
      Label6.Font.Color := clRed;
      Label7.Font.Color := clRed;
  end
else
  Label6.Font.Color := clGreen;
  Label7.Font.Color := clGreen;

  Label9.Font.Color := clGreen;
  Label9.Caption := 'wahrscheinlich';
  Label6.Font.Color := clGreen;
  Label7.Font.Color := clGreen;
end;
doch da ist immer ein Label Grün und es kommt immer wahrscheinlich raus. Wo liegt denn da wieder der Fehler ?

Luckie 28. Okt 2003 08:59

Re: nochmal DEC: Hash wird nicht in Stream geschrieben ???
 
Nach dem else fehlt ein begin end Block!!!

Predator 28. Okt 2003 09:09

Re: nochmal DEC: Hash wird nicht in Stream geschrieben ???
 
ahh man hast recht. Heut is net mein Tag.

mal ne Frage. In einem anderen Forum meint jemand folgendes:

(bedenke: ich verwende Blowfish mit SHA_1 und cmCBC)

"deine verschluesselung setzt sich immer zuerst aus dem verschluesselten quelltext und direkt danach dem passwort zusammen, wobei das passwort den eigentlichen verschluesselten quelltext nicht beeinflusst!

Bsp.:

verschluesselter quelltext: xyz
passwort verschluesselt: pass01

zusammen sieht das bei dir dann so aus:

verschluesselung gesammt: xzypass01

um den quelltext unabhaengig zu entschluesseln wird das passwort garnicht benoetigt, was die sache nicht sehr sicher macht!"

stimmt das nun oder stimmt das nun nicht ?

Ich denke nicht, weil das Passwort doch nicht wirklich in der Datei gespeichert wird oder ist das wahr ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:33 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz