Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    35

    [C++] Gestione file per conservare password

    Ciao a tutti, sto cercando di creare un interfaccia di riconoscimento password che permetta di accedere all'utilizzo di un software, ma ho un problema con il salvataggio e la gestione della stessa su file... Vi posto il codice così sono più chiaro:

    codice:
    Codice:	
    Espandi/Riduci
      
    
    int pwd(){ 
    
       int i; 
       char pwd1[10]; 
       char pwd2[10]; 
       fstream fs; 
    
       if(!fs){ 
          fs.open("pwd", ios::out | ios::binary); 
          cout<< "PRIMO AVVIO\nInserire una password di massimo 10 caratteri. Affinche' essa sia difficilmente individuabile inserite numeri e caratteri maiuscoli o minuscoli." << endl; 
          do{ 
             cout<< endl << "Inserire password amministratore: "; 
             cin>> pwd1; 
             cout<< "conferma password: "; 
             cin>> pwd2; 
             if(strcmp(pwd1, pwd2) != 0){cout<< endl << "Conferma password fallita. Ripetere l'inserimento" << endl << endl;} 
          }while(strcmp(pwd1, pwd2) != 0); 
          cout<< endl << "Password accettata. Conservare la password poiche' sara' impossibile recuperarla senza perdite di dati." << endl << endl; 
          fs.write((char*)&pwd1,sizeof(pwd1)); 
          fs.close(); 
          return 0; 
       } 
       else{ 
          fs.open("pwd", ios::in | ios::binary); 
          fs.read((char*)&pwd1, sizeof(pwd1)); 
          cout<< "CONTROLLO SICUREZZA"<< endl; 
          for(i=2; i>=0; i--){ 
             cout<< endl << "Password Amministratore: "; 
             cin>> pwd2; 
             if(strcmp(pwd1, pwd2) != 0) cout<< endl << "Password errata. Tentativi restanti "<< i << endl; 
                else break; 
             if(i == 0) return 1; 
          } 
          return 0; 
       } 
    }
    In pratica questa è la funzione, vorrei che ci fosse un sistema per cui se il file contenente la password esiste già, si richieda l'inserimento della stessa, se questo file non c'è, parta il primo avvio con l'inserimento per la prima volta della password che verrà poi utilizzata. Ho provato un if(!fs) ma con scarsi risultati, singolarmente il codice contenuto nell'if e nell'else funzionano, quindi credo l'inghippo stia proprio nel controllo,mi sta facendo impazzire.

    Mi affido a voi menti esperte ringraziandovi in anticipo.

    P.S. Una piccolezza, qualcuno sa come fare apparire degli asterischi al posto del testo quando si digita la password?
    grazie ancora

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Il controllo lo devi fare *dopo* che esegui la open.

    Che senso ha fare il controllo se il programma non conosce ancora il nome del file da aprire?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    35
    Originariamente inviato da oregon
    Il controllo lo devi fare *dopo* che esegui la open.

    Che senso ha fare il controllo se il programma non conosce ancora il nome del file da aprire?
    Forse è questo che intendevi?

    codice:
     	
    fs.open("pwd", ios::binary);
    	if(!fs){
    		fs.open("pwd", ios::out | ios::binary);
    		cout<< "PRIMO AVVIO\nInserire una password di massimo 10 caratteri. Affinche' essa sia difficilmente individuabile inserite numeri e caratteri maiuscoli o minuscoli." << endl;
    		do{
    			cout<< endl << "Inserire password amministratore: ";
    			cin>> pwd1;
    			cout<< "conferma password: ";
    			cin>> pwd2;
    			if(strcmp(pwd1, pwd2) != 0){cout<< endl << "Conferma password fallita. Ripetere l'inserimento" << endl << endl;}
    		}while(strcmp(pwd1, pwd2) != 0);
    		cout<< endl << "Password accettata. Conservare la password poiche' sara' impossibile recuperarla senza perdite di dati." << endl << endl;
    		fs.write((char*)&pwd1,sizeof(pwd1));
    		fs.close();
    		return 0;
    	}
    	else{
    		fs.open("pwd", ios::in | ios::binary);
    		fs.read((char*)&pwd1, sizeof(pwd1));
    		cout<< "CONTROLLO SICUREZZA"<< endl;
    		for(i=2; i>=0; i--){
    			cout<< endl << "Password Amministratore: ";
    			cin>> pwd2;
    			if(strcmp(pwd1, pwd2) != 0) cout<< endl << "Password errata. Tentativi restanti "<< i << endl;
    				else break;
    			if(i == 0) return 1;
    		}
    		return 0;
    Il risultato è che crea il file pwd.txt ma quando si riavvia il programma entra sempre nell'if, come se il file non esistesse, ripetendo il primo avvio...

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    un consiglio

    ti consiglio di usare la getch() per fare l'input della pass e memorizzare carattere per carattere (facendo attenzione a backspace) e stampando a video per ogni carattere premuto "*";

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    35

    Re: un consiglio

    Originariamente inviato da kirakira93
    ti consiglio di usare la getch() per fare l'input della pass e memorizzare carattere per carattere (facendo attenzione a backspace) e stampando a video per ogni carattere premuto "*";
    Non so come si fa a stampare "*" infatti mi sembrava anche di averlo chiesto, il mio problema è nel controllare l'esistenza del file, non nell'acquisire la password.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Schematicamente dovresti scrivere ...

    codice:
       fstream fs; 
    
       fs.open("pwd", ios::in | ios::binary);  // In Lettura
       if(fs.fail())
       { 
          fs.open("pwd", ios::out | ios::binary);  // In Scrittura
          cout<< "PRIMO AVVIO\nInserire una password di massimo 10 caratteri. Affinche' essa sia difficilmente individuabile inserite numeri e caratteri maiuscoli o minuscoli." << endl; 
          // Scrivi la pwd
       } 
       else
       { 
          // Leggi la pwd
          cout<< "CONTROLLO SICUREZZA"<< endl; 
       }
    
        fs.close(); // Unico punto di chiusura
        return 0;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    35
    Originariamente inviato da oregon
    Schematicamente dovresti scrivere ...
    Perfetto ora facendo così il controllo sul file funziona e l'if e l'else vengono chiamati al momento giusto, sorge però un altro problema: non scrive un bel niente.
    Il file lo crea ma è vuoto e questo non permette di riconoscere la password ovviamente
    Sai dirmi perché?

    Cmq grazie infinitamente per l'aiuto, sono giorni che ci sbatto la testa

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Quale codice hai usato per la scrittura?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    35
    codice:
    	if(fs.fail()){
    		fs.open("pwd", ios::out | ios::binary);
    		cout<< "PRIMO AVVIO\nInserire una password di massimo 10 caratteri. Affinche' essa sia difficilmente individuabile inserite numeri e caratteri maiuscoli o minuscoli." << endl;
    		do{
    			cout<< endl << "Inserire password amministratore: ";
    			cin>> pwd1;
    			cout<< "conferma password: ";
    			cin>> pwd2;
    			if(strcmp(pwd1, pwd2) != 0){cout<< endl << "Conferma password fallita. Ripetere l'inserimento" << endl << endl;}
    		}while(strcmp(pwd1, pwd2) != 0);
    		cout<< endl << "Password accettata. Conservare la password poiche' sara' impossibile recuperarla senza perdite di dati." << endl << endl;
    		fs.write((char*)&pwd1,sizeof(pwd1));
    		return 0;
    	}
    La scrittura avviene solo nel corpo dell'if è quello è rimasto invariato dall'inizio, il codice è questo.

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Inserisci la riga in rosso

    codice:
    if(fs.fail()){
        fs.clear();
        fs.open("pwd", ios::out | ios::binary);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.