AW: DFM-Dateien verschlüsseln?
Das entwickelt sich zu einer schönen Übung sehe ich gerade.
Ich habe mittlerweile alles hinbekommen außer.. ich schaffe es nicht die Datei abzüglich der letzten 16 Bytes einzulesen. Ich bekomme nur Chinesisch :pale:
Delphi-Quellcode:
Alles andere klappt. Die letzten 32 Zeichen lese ich so aus
// Dateiinhalt:
// TESTTESTTEST_d0f980502943ec62a52e0a44280a5066 aFileStream := TFileStream.Create(sFile, fmOpenRead or fmShareDenyWrite); try // Get hash of the original file content without the hash we appended before aFileStream.Seek(32 * SizeOf(Char), soFromEnd); // gehe an die End-Position-32 Zeichen (also bis zum _) SetLength(s, aFileStream.Position * SizeOf(Char)); // setze die Länge von s auf Länge von "TESTTESTTEST_" aFileStream.Read(s[1], Length(s) * SizeOf(Char)); ShowMessage(s); // Chinesisch? finally aFileStream.Free; end;
Delphi-Quellcode:
SetLength(sOut, 32 * SizeOf(Char));
aFileStream.Position := aFileStream.Size - Length(sOut); aFileStream.Read(sOut[1], Length(sOut) * SizeOf(Char)); // sOut enthält nun d0f980502943ec62a52e0a44280a5066 |
AW: DFM-Dateien verschlüsseln?
Du weißt aber schon das unter XE8 SizeOf(Char) = 2 ist, oder?
Und wenn man einen Binären Inhalt in einen (Unicode) String liest kann (nach Betrachtung der Wahrscheinlichkeit) nur Chinesisch raus kommen. |
AW: DFM-Dateien verschlüsseln?
Das SizeOf(Char) 2 ist weiß ich. Aber wenn ich ich zum Auslesen 16*SizeOf(Char) verwende statt 32 bekomme ich ein falsches Ergebnis und nicht d0f980502943ec62a52e0a44280a5066
|
AW: DFM-Dateien verschlüsseln?
Ich würd' für die MD5-Checksumme kein Char sondern Byte nehmen.
|
AW: DFM-Dateien verschlüsseln?
Ich bin jetzt soweit, dass es funktioniert. Nur von Char auf Byte habe ich noch nicht umgestellt, da das irgendwie nicht klappt.
Delphi-Quellcode:
// Calculate the hash of a files content and append it to the file
aFileStream := TFileStream.Create(sFile, fmOpenReadWrite or fmShareDenyNone); try aFileStream.Position := 0; SetLength(s, aFileStream.Size); aFileStream.Read(s[1], Length(s)); // hash berechnen aFileStream.Position := aFileStream.Size; aFileStream.Write(s[1], Length(s) * SizeOf(Char)); finally aFileStream.Free; end;
Delphi-Quellcode:
aFileStream := TFileStream.Create(sFile, fmOpenRead or fmShareDenyWrite);
try // Get the hash of the original file content (without the hash we appended before) aFileStream.Position := 0; SetLength(s, aFileStream.Size - (32 * SizeOf(Char))); aFileStream.Read(s[1], Length(s)); // hash berechnen // Get hash from stream end SetLength(sOut, 32 * SizeOf(Char)); aFileStream.Position := aFileStream.Size - Length(sOut); aFileStream.Read(sOut[1], Length(sOut)); finally aFileStream.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz