CRC prüft auf Dateien

8

Ich arbeite mit einem kleinen FAT16-Dateisystem und möchte CRC-Werte für einzelne XML-Dateien generieren, die Konfigurationsinformationen speichern. Wenn sich die Daten ändern oder beschädigt sind, möchte ich in der Lage sein, die CRC zu überprüfen, um festzustellen, dass die Datei noch im ursprünglichen Zustand ist.

Die Frage ist, wie setze ich den CRC-Wert in die Datei, ohne den CRC-Wert der Datei selbst zu ändern? Ich kann mir ein paar Lösungen vorstellen, aber ich denke, es muss eine ziemlich standardisierte Lösung für dieses Problem geben.

    
Danny 28.10.2008, 23:10
quelle

7 Antworten

8

Sie könnten den CRC-Wert an das Ende der Datei anhängen. Wenn Sie später den CRC-Wert für die Überprüfung berechnen, lassen Sie die letzten vier Bytes weg.

    
Greg Hewgill 28.10.2008, 23:13
quelle
5

Definieren Sie einen Header, generieren Sie den CRC von allem außer dem Header und setzen Sie den Wert in den Header.

    
PiedPiper 28.10.2008 23:14
quelle
4

Eine gängige Lösung besteht darin, nur verschiedene Dateien zu verwenden. Neben jeder Datei haben Sie einfach eine Datei mit demselben Dateinamen mit einer anderen Erweiterung. Zum Beispiel: foobar.txt und foobar.txt.md5 (oder .crc).

    
Wedge 28.10.2008 23:39
quelle
4

Die gängige Lösung, die häufig in Kommunikationsprotokollen verwendet wird, besteht darin, das CRC-Feld auf 0 zu setzen, den CRC zu berechnen und dann anstelle von 0 zu setzen. Der Prüfcode sollte den umgekehrten Vorgang ausführen - CRC lesen, Feld auf Null setzen , berechne die CRC und vergleiche.

Auch für eine Dateiprüfsumme empfehle ich dringend MD5 anstelle von CRC.

    
shoosh 29.10.2008 00:41
quelle
1

Eine Lösung wäre, dsofile.dll zu verwenden, um Ihren Dateien erweiterte Eigenschaften hinzuzufügen. Sie können den CRC-Wert (in eine Zeichenfolge konvertiert) als erweiterte Dateieigenschaft speichern. Auf diese Weise ändern Sie nicht die Struktur der Datei.

dsofile.dll ist eine ActiveX-DLL, so dass sie aus verschiedenen Sprachen aufgerufen werden kann, jedoch beschränkt sie sich auf die Ausführung unter Windows. Hier finden Sie weitere Informationen zu dsofile.dll: Ссылка

    
Kluge 28.10.2008 23:19
quelle
1

Ich würde den CRC nicht in der Datei selbst speichern. Ich hätte eine einzige Datei (ich würde das XML-Format verwenden), die Ihr Programm verwendet, mit einer Liste von Dateinamen und ihren zugehörigen CRC-Werten. Es ist nicht nötig, es so kompliziert zu machen.

    
KPexEA 28.10.2008 23:51
quelle
0

Es gibt keine Möglichkeit, dies zu tun. Sie könnten die ersten x-Bytes (CRC verwendet eine 32-Bit-Ganzzahl, also 4 Bytes) der Datei enthalten die CRC, und dann bei der Berechnung Ihrer CRC, könnten Sie nur die Bytes, die nach diesen ersten 4 Bytes kommen.

Eine andere Lösung wäre, den CRC in den Dateinamen aufzunehmen. Also MyFile.Config wäre MyFile.CRC1234567.Config.

    
Kibbee 28.10.2008 23:15
quelle

Tags und Links