![]() |
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:
und so sieht der Header aus:
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;
Delphi-Quellcode:
geschrieben wird so:
type
TFileHeader = packed record THashString : string[10]; end;
Delphi-Quellcode:
und das Ergebnis ist, das FileHeader.THashString leer ist.
dest.write(FileHeader, sizeof(TFileHeader));
woran liegt das ? Danke ! |
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. |
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:
Meinst du ich muss erst die anzahl speichern und dann den string ?
THashString := 'hjegfralos';
also
Delphi-Quellcode:
und dann
len := length(FileHeader.THashString);
dest.write(len, sizeof(len));
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] |
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? |
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.
|
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. |
Re: nochmal DEC: Hash wird nicht in Stream geschrieben ???
Zitat:
|
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:
doch da ist immer ein Label Grün und es kommt immer wahrscheinlich raus. Wo liegt denn da wieder der Fehler ?
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; |
Re: nochmal DEC: Hash wird nicht in Stream geschrieben ???
Nach dem else fehlt ein begin end Block!!!
|
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 ? |
Re: nochmal DEC: Hash wird nicht in Stream geschrieben ???
Neue Frage, neuer Thread. Da es um die Theorie geht, entweder in Sonstiges oder Programmierung allgemein.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:10 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 by Thomas Breitkreuz