Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Criptatore File C++ *need help*
Forum - C/C++ - Criptatore File C++ *need help*

Avatar
GG_32 (Normal User)
Newbie


Messaggi: 4
Iscritto: 03/03/2020

Segnala al moderatore
Postato alle 22:36
Martedì, 21/04/2020
Buongiorno/Buonasera a tutti, il progetto che ho in mente è quello di riuscire a criptare il contenuto di un semplice file txt, come metodo di criptazione userò lo xor e ho già un algoritmo che genera la chiave, ho anche l'algoritmo che legge il contenuto del file.
Il problema è:
Come faccio a prendere in considerazione come password per accedere alla decriptazione una stringa messa in un file txt?
Grazie a tutte le "anime misericordiose" che mi aiuteranno, in caso che non sono stato chiaro posso fornire ulteriori spiegazioni più dettagliate.

:)

PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 22:40
Martedì, 21/04/2020
Non ho capito...  


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
GG_32 (Normal User)
Newbie


Messaggi: 4
Iscritto: 03/03/2020

Segnala al moderatore
Postato alle 9:39
Mercoledì, 22/04/2020
Testo quotato

Postato originariamente da AldoBaldo:
Non ho capito...  


Allora, grazie di aver risposto, io volevo che l'utente scrivesse la propria password su un file di testo e il mio programma, per il controllo della password che successivamente deve essere inserita prenda in considerazione la frase scritta nel file di testo...scusate se non sono molto chiaro : (

PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 11:25
Mercoledì, 22/04/2020
Innanzitutto, vuoi procedere con C++ (ad oggetti) oppure c/c++ ?
Nel primo caso usa la libreria
Codice sorgente - presumibilmente C/C++

  1. #include <fstream>


con
Codice sorgente - presumibilmente Plain Text

  1. OpenFile("path/file.txt");
  2. OpenFile.get(ch);
  3. OpenFile.close();



(Vai a cercarti come funzionano i metodi)

Nel 2° caso potresti usare
Codice sorgente - presumibilmente Plain Text

  1. fopen()
  2. fscanf()
  3. fclose()



Ed inserisci la password letta in una stringa/array di caratteri.

Questi sono solo due esempi, un buon libro di programmazione potrebbe dartene anche altri.

Solo ua domanda, se non sai leggere un file, perchè stai cercando di fare cose più complicate tipo il criptaggio del file? Il fatto che tu abbia una funzione che legge il file e lo cripti non è una scusa. Il criptaggi necessita di lettura e scrittura dei file. Le funzioni base le devi avere.

Ultima modifica effettuata da Mikelius il 22/04/2020 alle 11:26
PM Quote
Avatar
GG_32 (Normal User)
Newbie


Messaggi: 4
Iscritto: 03/03/2020

Segnala al moderatore
Postato alle 19:59
Mercoledì, 22/04/2020

PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 22:33
Mercoledì, 22/04/2020
Per caricare in memoria il contenuto di un file di testo in C io di solito faccio così:

Codice sorgente - presumibilmente C++

  1. char *carica_file_txt( const char *nome_file ) {
  2.     char *d = NULL; /* d: dati */
  3.  
  4.     if( *nome_file ) {
  5.         FILE *f = fopen( nome_file, "r" );
  6.  
  7.         if( f ) {
  8.             size_t i, dim;
  9.             int c;
  10.  
  11.             for( dim=0; EOF!=(c=fgetc(f)); ++dim );
  12.  
  13.             if( (d=calloc(dim+1,1)) ) {
  14.                 for( rewind(f), i=0; EOF!=(c=fgetc(f)); ++i ) d[i] = c;
  15.                 if( i!=dim ) { free( d ); d = NULL; } /* errore! */
  16.             }
  17.  
  18.             fclose( f );
  19.         }
  20.     }
  21.  
  22.     return d; /* d e' NULL in caso di errore */
  23. }



Il codice non è scritto nel modo più leggibile, perché una delle mie fissazioni è quella di ridurre al minimo la quantità delle righe. Lo so che è un difetto, ma pazienza: io mi ci trovo bene. Una versione più "verbosa" potrebbe essere questa, che fa esattamente la stessa cosa:

Codice sorgente - presumibilmente C#

  1. /*==============================================================================
  2. Apre in lettura il file di testo nome_file e ne legge carattere per carattere il
  3. contenuto, copiandolo in uno spazio di memoria dinamica appositamente allocato.
  4. Spetta al chiamante liberare la memoria allocata.
  5. Se tutto va a buon fine, restituisce il puntatore alla memoria allocata. In caso
  6. di errore, nessuna memoria risulta allocata e la funzione restituisce NULL.
  7. ==============================================================================*/
  8.  
  9. char *carica_file_txt( const char *nome_file ) {
  10.     char *d = NULL; /* d: dati */
  11.  
  12.     if( *nome_file ) {
  13.         FILE *f = fopen( nome_file, "r" );
  14.  
  15.         if( NULL != f ) {
  16.             size_t i, dim;
  17.             int c = fgetc( f );
  18.  
  19.             for( dim=0; EOF!=c; ++dim ) {
  20.                 c = fgetc( f );
  21.             }
  22.            
  23.             d = calloc( dim+1, 1 );
  24.  
  25.             if( NULL != d ) {
  26.                 rewind( f );
  27.                 c = fgetc( f );
  28.                
  29.                 for( i=0; EOF!=c; ++i ) {
  30.                     d[i] = c;
  31.                     c = fgetc( f );
  32.                 }
  33.                
  34.                 if( i != dim ) { /* errore! */
  35.                     free( d );
  36.                     d = NULL;
  37.                 }
  38.             }
  39.  
  40.             fclose( f );
  41.         }
  42.     }
  43.  
  44.     return d; /* d e' NULL in caso di errore */
  45. }



Se dovessi voler usare questa funzione in C++ dovresti scrivere d=(char*)calloc(dim+1,1); anziché d=calloc(dim+1,1);

Ah, dimenticavo: la funzione presuppone che il testo occupi un solo byte per carattere.

EDIT: devi includere stdlib.h e stdio.h .

Ultima modifica effettuata da AldoBaldo il 22/04/2020 alle 22:37


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote