2014-11-08 3 views
5

Creo il mio file utilizzando File.WriteAllBytes(). Byte [] passato a File.WriteAllBytes() è crittografato da un algoritmo di mia proprietà. È necessaria la password utilizzata quando il file è stato crittografato (l'utente del programma conosce la password) per decrittografarlo. Ma quando alcuni file viene aperto dal mio programma utilizzando File.ReadAllBytes() ci sono 3 situazioni:Creazione di un file che può essere utilizzato solo dal mio programma. Come faccio a differenziarlo dai file di altri programmi?

  1. file che viene aperto è il file del mio programma e utente conosce la password per aprirlo.
  2. Il file che viene aperto è il file del mio programma ma l'utente non conosce la password per aprirlo.
  3. Il file che viene aperto non è il file del mio programma.

Il primo è facile da gestire. Il secondo e il terzo sono uguali per il mio programma perché il mio programma non conosce la differenza tra byte crittografato [] e byte [] di un file casuale.

Come differisco queste situazioni? Stavo pensando di aggiungere qualche sequenza di byte alla fine o all'inizio di byte [] prima di passarla a File.WriteAllBytes(). È sicuro? In che modo i programmi moderni differiscono i loro file da altri file?

risposta

4

È possibile assegnare al file una certa struttura prima della crittografia e verificare che la struttura sia presente dopo la decrittografia. Se la struttura non è presente, non è il tuo file.

Ad esempio, è possibile calcolare una somma di controllo e memorizzarla nei primi byte prima del blocco di dati "payload". Criptare la somma di controllo insieme al resto del file.

Quando decrittografate, prendete il contenuto del payload e calcolate nuovamente la somma di controllo. Confronta il risultato memorizzato con il risultato calcolato per vedere se i due corrispondono. Se non corrispondono, non è il tuo file. Se corrispondono, è molto probabile che sia il tuo file.

Questo non è l'unico approccio: la struttura può essere qualsiasi cosa desideri, dal posizionare una sequenza speciale di byte in un punto specifico per utilizzare uno specifico formato rigoroso (ad esempio un XML) per i tuoi contenuti e quindi convalidare questo formato dopo la decrittazione.

[il file è] crittografato dall'algoritmo del mio.

Fare molta attenzione alla sicurezza attraverso l'oscurità: inventare un algoritmo crittograficamente sicuro è un compito estremamente difficile.

+0

non preoccuparti :) Uso algoritmo simile a RC4. Inoltre nessuno userà quel programma tranne me comunque. Ho creato questo programma solo perché voglio creare qualcosa xD btw, penso di aver trovato una soluzione: i primi N decodificati byte sono sempre gli stessi (penso/deve essere confermato) perché sono prodotti da http: // StackOverflow .com/a/18205093/1412924 codice modificato di questo ragazzo. L'intestazione di serializzazione sembra essere sempre la stessa. Lo controllerò ora – foxneSs

2

Molti molti formati di file utilizzano "Numeri magici" davanti al file per determinarne il tipo. Usa il primo ... 4 byte, scrivi una sequenza personalizzata e poi la legge quando carichi il file.

Problemi correlati