2010-08-01 36 views
5

Voglio avere un programma come questo:Come criptare un file di testo usando C?

scanf("%s", name); 
scanf("%s", id); 
scanf("%d", &age); 

Ora voglio scrivere name, id e age in un file, ma il file deve essere crittografato, in modo che solo il mio programma in grado di leggere di nuovo i dati che ha scritto.

Devo utilizzare una delle librerie di crittografia mentioned here (sono tutte librerie piuttosto pesanti, ho solo bisogno di crittografare un file di testo) oppure esiste un altro metodo più semplice?

Se una libreria di crittografia è la soluzione, quale è la soluzione migliore per una crittografia di file di testo semplice?

+3

Se si inizia con la crittografia dei file vi consiglio di pensare anche su dove tenere la password/chiave utilizzata per la crittografia dei file. – Oleg

risposta

3

È meglio utilizzare un algoritmo a chiave simmetrica, come AES. Ad esempio, è possibile trovare piccoli codici sorgente here.

Se le applicazioni sono fondamentali, è necessario utilizzare le librerie collegate.

7

Se si desidera la sicurezza, è un errore eseguire il rollover della propria libreria di crittografia. Utilizzare una libreria di crittografia ben stabilita (anche se può sembrare gonfia) e lasciare la sicurezza e la sua corretta implementazione agli esperti.

Se è possibile utilizzare C++, suggerisco Crypto++ e, se non è possibile utilizzare C++, suggerisco di implementare una libreria wrapper C intorno a Crypto++. Un'altra possibilità è libcrypto, sebbene manchi di supporto per AES.

Tuttavia, dovrei avvisarti che se il programma e il file di testo si trovano sulla stessa macchina, è necessario che la password sia fornita esternamente (ad es. Dall'utente); le password incorporate nei programmi sono facilmente estraibili e non offrono alcuna sicurezza. Se il programma è inaccessibile (ad es. Si trova su un server web e qualcuno con il file di testo non avrà accesso all'eseguibile), allora è ok.

+0

ovviamente libcrypto supporta AES. –

+0

@GregS, non secondo la pagina man. –

0

Per un semplice file di testo che si legge/scrive in un unico passaggio, utilizzerei un codice di flusso, ad es. RC4.

Supponendo che si stia utilizzando una chiave segreta incorporata RC4 è abbastanza semplice da implementare o ci dovrebbero essere molte implementazioni leggere.

+0

Ma come consumeresti la flebo? Questo è abbastanza difficile con RC4. – CodesInChaos

+0

Generalmente l'IV viene associato alla password o altro segreto condiviso nell'input per la fase di generazione della chiave, ad es. o aggiungilo o anteponilo alla password. – Rup

2

Avete bisogno di una crittografia forte? Le persone a cui stai proteggendo il file hanno accesso all'eseguibile e hanno le competenze per smontarle e analizzarle? Hanno abilità criptoanalitiche? In caso contrario, è possibile utilizzare un cifrario basato su XOR molto semplice.

  1. Utilizzare un programma per generare una stringa LONG casuale di caratteri, per esempio "837es238aj983", ma più a lungo rispetto a qualsiasi stringa che si può leggere da input (che non ha bisogno di essere leggibile).
  2. Genera un numero intero casuale.
  3. Memorizza la stringa casuale e il numero intero come variabili globali nel programma C.
  4. XOR ogni età si legge con il numero intero casuale e si salva il valore XORed sul file.
  5. XOR ogni carattere nelle stringhe che si legge dall'input con il carattere nello stesso indice nella stringa casuale. Salva il valore XORed nel file.
  6. Quando si leggono i valori dal file, si esegue nuovamente XOR con le chiavi casuali e si ottengono i valori originali.
+4

-1. Non implementare la tua crittografia, mai. Se hai bisogno di sicurezza, usa la vera crittografia. Se non ne hai bisogno per essere sicuro, non criptarlo in primo luogo. – SecurityMatt

Problemi correlati