Entwickler-Ecke
Dateizugriff - BlockWrite und BlockRead liefern unterschiedliche Ergebnisse
Kay E. - Do 03.03.11 15:04
Titel: BlockWrite und BlockRead liefern unterschiedliche Ergebnisse
Hallo!
Ich muss ein paar Daten meines Programms verschlüsseln. Ich nutze dafür eine einfache XOR verschlüsselung mit festem Key. Das wird in einem File als Bytes gespeichert.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TSystemAdjustmentsForm.Button1Click(Sender: TObject); var ByteFile: file; aData, aDataRead: TCryptData; vData, vData2: TSystemData; begin vData := FData; SetLength(aData, sizeof(TSystemData)); AssignFile(ByteFile, 'Testfile.txt'); Rewrite(ByteFile, SizeOf(TSystemData)); aData := EncryptData(FData); BlockWrite(Bytefile, aData, 1); CloseFile(Bytefile);
SetLength(aDataRead, sizeof(TSystemData)); reset(ByteFile, SizeOf(TSystemData)); BlockRead(ByteFile, aDataRead[0], 1); vData2 := DecryptData(aDataRead); CloseFile(ByteFile); end; |
FData ist vom Typ TSystemData, was ein Record mit Integern, Single und von der Größe festgelegten Strings ist. Größe 576 Bytes.
TCryptData ist ein dynamisches array of Byte;
aData und aDataRead haben zwar die selber Länge und in jedem Index steht ein Wert, dieser Wert unterscheidet sich aber teilweise dramatisch. Das die Codierung damit nicht funktioniert und sich dementsprechend vData und vData2 massiv unterscheiden ist auch klar.
Ich bin mir ziemlich sicher, dass die Codierung funktioniert, also die Daten werden zumindest richtig encrypted. Auch wird die richtige Anzahl Bytes in die Datei geschrieben. Es hapert grad nur am Auslesen, da bekomm ich nicht die richtigen Werte wieder zurück.
Was läuft da schief?
Danke schon mal
Grüße Kay
Moderiert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 03.03.2011 um 14:54
Gammatester - Do 03.03.11 16:45
Zu Schreiben nimm 'mal BlockWrite(Bytefile, aData[0], 1);.
Weiter ist zu beachten, daß wenn in Deinem Record zB ein string[20] steht, aber der aktuelle String nur 4 Zeichen hat, später beim Lesen 16 Zeichen/Bytes undefiniert sein können.
jasocul - Do 03.03.11 17:39
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TSystemAdjustmentsForm.Button1Click(Sender: TObject); var ByteFile: file; aData, aDataRead: TCryptData; vData, vData2: TSystemData; begin vData := FData; SetLength(aData, sizeof(TSystemData)); AssignFile(ByteFile, 'Testfile.txt'); Rewrite(ByteFile, SizeOf(TSystemData)); aData := EncryptData(FData); BlockWrite(Bytefile, aData, 1); CloseFile(Bytefile);
SetLength(aDataRead, sizeof(TSystemData)); reset(ByteFile, SizeOf(TSystemData)); BlockRead(ByteFile, aDataRead[0], 1); vData2 := DecryptData(aDataRead); CloseFile(ByteFile); end; |
Du übergibst beim Encrypten einen festen Record und beim Decrypten ein dynamisches Array. Ich vermute den Fehler bei der Übergabe an DecryptData.
Du kannst es aber einfach testen. Lass das En- und Decrypten einfach mal weg und vergleiche die geschriebenen Daten mit den gelesenen. Die sollten ohne diese beiden Routinen identisch sein. Ich kann zumindest keinen Fehler darin finden. Du hast ja sogar daran gedacht, beim BlockRead den Anfang des Arrays zu übergeben.
Kay E. - Do 03.03.11 17:42
Ah, perfekt, mit dem index scheint es zu funktionieren. Was so ein doofer Index alles anrichten kann -.-
Ich hab Blockwrite / -read genommen, weil ich im Internet kurz gegoogelt hab, wie ich Bytefiles speicher. Auf TFileStream bin ich nicht gekommen, da bin ich wohl auf der Leitung gesessen :]
Naja, aber hauptsache, es funktioniert jetzt :) Danke euch beiden!
Grüße Kay
---
Moderiert von
Narses: Beiträge zusammengefasst---
@ Jasocul: Ne, die Fuunktionsparameter sind schon so abgestimmt, das passt. Ich hab zum Testen ja auch extra die lokalen Variablen reingenommen, um sehen zu können, ob die geschriebenen und gelesenen identisch sind. Waren sie aber nicht. Wie gesagt: Mit dem Anfangsindex beim Schreiben klappts auch.
Ach, und noch was: Kanns sein, dass du Hohlbein gelesen hast? ;)
Grüße Kay
jasocul - Do 03.03.11 22:19
Kay E. hat folgendes geschrieben : |
Ach, und noch was: Kanns sein, dass du Hohlbein gelesen hast? ;) |
Wie kommst du denn nur auf diese Idee? :mrgreen:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!