Oppure

Loading
21/04/20 20:36
GG_32
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.

:)
aaa
21/04/20 20:40
AldoBaldo
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.
22/04/20 7:39
GG_32
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 : (
aaa
22/04/20 9:25
Mikelius
Innanzitutto, vuoi procedere con C++ (ad oggetti) oppure c/c++ ?
Nel primo caso usa la libreria
#include <fstream>

con
OpenFile("path/file.txt");
OpenFile.get(ch);
OpenFile.close();


(Vai a cercarti come funzionano i metodi)

Nel 2° caso potresti usare
fopen()
fscanf()
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 22/04/20 9:26
aaa
22/04/20 17:59
GG_32
aaa
22/04/20 20:33
AldoBaldo
Per caricare in memoria il contenuto di un file di testo in C io di solito faccio così:

char *carica_file_txt( const char *nome_file ) {
    char *d = NULL; /* d: dati */

    if( *nome_file ) {
        FILE *f = fopen( nome_file, "r" );

        if( f ) {
            size_t i, dim;
            int c;

            for( dim=0; EOF!=(c=fgetc(f)); ++dim );

            if( (d=calloc(dim+1,1)) ) {
                for( rewind(f), i=0; EOF!=(c=fgetc(f)); ++i ) d[i] = c;
                if( i!=dim ) { free( d ); d = NULL; } /* errore! */
            }

            fclose( f );
        }
    }

    return d; /* d e' NULL in caso di errore */
}


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:

/*==============================================================================
Apre in lettura il file di testo nome_file e ne legge carattere per carattere il
contenuto, copiandolo in uno spazio di memoria dinamica appositamente allocato.
Spetta al chiamante liberare la memoria allocata.
Se tutto va a buon fine, restituisce il puntatore alla memoria allocata. In caso
di errore, nessuna memoria risulta allocata e la funzione restituisce NULL.
==============================================================================*/

char *carica_file_txt( const char *nome_file ) {
    char *d = NULL; /* d: dati */

    if( *nome_file ) {
        FILE *f = fopen( nome_file, "r" );

        if( NULL != f ) {
            size_t i, dim;
            int c = fgetc( f );

            for( dim=0; EOF!=c; ++dim ) {
                c = fgetc( f );
            }
            
            d = calloc( dim+1, 1 );

            if( NULL != d ) {
                rewind( f );
                c = fgetc( f );
                
                for( i=0; EOF!=c; ++i ) {
                    d[i] = c;
                    c = fgetc( f );
                }
                
                if( i != dim ) { /* errore! */
                    free( d );
                    d = NULL;
                }
            }

            fclose( f );
        }
    }

    return d; /* d e' NULL in caso di errore */
}


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 22/04/20 20: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.