mirkus90
23-01-2014, 15:04
Vi spiego la situazione...devo leggere un file binario in cui ci sono salvate una serie di dati strutturati.
Il mio problema sta nel controllare al caricamento se il file non é stato corrotto ad esempio se qualcuno ha aperto il file e ha inserito caratteri a cavolo. Quindi penso di creare una funzione in cui apro il file e controllo che in ogni variabile ci sia un dato valido. Il dubbio è: come faccio a controllare che in un int c'è sempre un intero e così via????
Vi ringrazio
Ciaoooo
Daniels118
31-01-2014, 16:19
Se hai scritto delle strutture in un file, ne hai scritto solo i dati, non il tipo. Rileggendo i dati con la stessa struttura, ti ritrovi nuovamente le strutture che avevi prima. Dal momento che hai scritto solo i dati e non il loro tipo, se modifichi un dato questo rimane sempre valido. Un intero di due byte è sempre un intero di due byte, che tu ci scriva XX, YY, (&, CI, CO, PU, 31, /$, !H, ecc.. ecc...
L'unico modo per verificare che i dati non siano stati alterati è quello di utilizzare un'impronta digitale, meglio nota come "digest". Dopo aver scritto i tuoi dati, ne invii la loro rappresentazione binaria ad una routine denominata hash, che produrrà il digest, quindi accoderai quest'ultimo ai tuoi dati.
In fase di lettura, passerai nuovamente i dati binari letti dal file alla funzione hash e verificherai che il digest restituito corrisponda a quello salvato nel file.
Una modifica casuale dei dati o del digest comporterà un'incongruenza tra questi e ti consentirà di verificarne l'integrità.
Questo sistema assicura l'integrità di un file soggetto a disturbi, ma non previene manomissioni da parte di un hacker, poiché questi potrebbe modificare i dati, rigenerare il digest e sostituirlo a quello originale. Per ovviare a questo problema, prima di generare il digest si combinano i dati con una password (che non verrà scritta nel file), in tal modo solo conoscendo la password sarà possibile generare il digest corretto.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.