PDA

Visualizza la versione completa : [c++] curiosità su criptare un file


g.b99pm10
04-01-2014, 12:46
Salve, da un po' mi è venuta la curiosità di criptare un file per renderlo sicuro...
scusate per le scarse conoscenze in questo ambito, cercherò di spiegarmi il più chiaramente possibile.
Il mio obbiettivo è leggere un file byte per byte e sostituire parte dei byte del file affinché non si possa più aprire il file. Come dovrei approcciarmi al problema? ho pensato di leggere un file con fread() e poi aggiungere una sequenza di byte casuali all'interno della sequenza del file che poi andrò a togliere per decriptare il file. Ora... con un file di testo utilizzando la funzione fread(puntatore char, 1, 1000, puntatore file) leggo il suo contenuto. Con i file di testo legge i 1000 caratteri iniziali del testo, mentre con le immagini png legge BM6 e un simbolo strano dopo, per il resto è tutto vuoto, come mai?
Sto approcciando in modo corretto il problema? help me pls ^^

oregon
04-01-2014, 12:51
Stiamo parlando di un preciso tipo di file che non vuoi che si legga o genericamente?

g.b99pm10
04-01-2014, 15:02
Intendo tutti i tipi di files, applicazioni, immagini ecc

oregon
04-01-2014, 15:37
Puoi usare un algoritmo semplice (sostituzione dei singoli caratteri in altri) o molto complessi (magari usando librerie già pronte).

Leggerai il file e ne scriverai un altro criptato.

g.b99pm10
04-01-2014, 17:59
Io volevo utilizzare solo le funzioni fread() e fwrite() ma come detto prima mentre funziona bene con i file di testo con le immagini legge solo pochi caratteri

MegaAlchimista
04-01-2014, 18:27
Banalmente puoi mettere tutto il file in un buffer, fare un cast a int, e sommare una costante scelta da te (per dire : 35) ad ogni intero e salvare un nuovo file.
In questo modo è anche facile creare un programma che decripti il file

oregon
04-01-2014, 18:41
Probabilmente non hai aperto il file in modalità binaria (vedi le opzioni della fopen)

Scara95
04-01-2014, 19:03
Banalmente puoi mettere tutto il file in un buffer, fare un cast a int, e sommare una costante scelta da te (per dire : 35) ad ogni intero e salvare un nuovo file.
In questo modo è anche facile creare un programma che decripti il file

Almeno la proposta di oregon offre un minimo di sicurezza!
Inoltre molto meglio un unsigned char che wrappi nel tuo caso...

MItaly
04-01-2014, 19:12
L'algoritmo di cifratura più semplice da implementare in genere è uno XOR binario di ogni byte con una costante nota (o con un set di costanti usate a rotazione), ma ovviamente è estremamente fragile (è sostanzialmente equivalente ad un cifrario di Cesare). Se vuoi usare un algoritmo di cifratura "vero" come ti è stato detto ci sono numerose librerie che puoi impiegare.

g.b99pm10
04-01-2014, 19:31
grazie mille per le esaurienti risposte, per me il metodo fragile va più che bene, volevo solo cercare di capire la struttura dei file e mi era venuta questa curiosità. Grazie mille per i consigli, se dovessi avere problemi posterò ancora. Ciao ;)

Loading