C++ Mettere una PASSWORD per l'eseguibile?? Si puo??

Pubblicità

Bruno4000

Nuovo Utente
Messaggi
96
Reazioni
0
Punteggio
38
vorrei che quando si apre il file exe..uscisse scritto " inserisci password"...se la password è corretta inizia il programma mentre le la password non è corretta..vorrei che uscisse scritto "password non corretta".Si puo fare?? Ho provato con l'IF..ma non sono sicuro..PS..se le lettere venissero coperte da * o #..sarebbe ancora meglio,ma anche senza va bn lo stesso...grz PS2...BUON NATALE!
 
Ultima modifica:
con "if" in teoria basta eseguire un confronto fra una stringa di input e quella da te inserita nel programma per decidere se continuare con l'esecuzione del programma, non so se sia il metodo più sicuro ma di certo è il più semplice.
in c++ non sono ferrato ma in c# con i forms di solito per quanto riguarda la sostituzione dei caratteri con degli asterischi di solito inserisco un evento che cattura l'input da tastiera, lo copia detro una variabile e sostituisce la lettura a schermo con gli asterischi.
 
Ho scritto un semplice programma che, all'inizio dell'esecuzione chiede di inserire una password (nascondendo i caratteri con degli asterischi) e continue l'esecuzione solo se la password inserita e' giusta:

#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
int x=0;
bool corretto=1;
char parola[]="parola", inserito[40];
cout << "Inserire password: ";
do{
inserito[x]=getch();
cout << "*";
if (inserito[x]==parola[x] && corretto==1 && inserito[x]!=13){
corretto=1;} else if (inserito[x]!=13) {
corretto=0;}
x++;} while (inserito[x-1]!=13);
cout << endl;
if (corretto==1){
cout << "Password corretta" << endl;
} else if (corretto==0) {
cout << "Password sbagliata" << endl;
return 0;}
system("pause");
return 0;
}
 
con "if" in teoria basta eseguire un confronto fra una stringa di input e quella da te inserita nel programma per decidere se continuare con l'esecuzione del programma, non so se sia il metodo più sicuro ma di certo è il più semplice.

Fatto così è praticamente inutile. Per spiegare perché brevemente:

Codice:
[...]
if (user_input != "la_password") {
  // accesso negato
}
[...]

Ora compila il codice, apri l'eseguibile con un editor esadecimale. "la_password" si legge tranquillamente in chiaro.
 
Fatto così è praticamente inutile.
Ora compila il codice, apri l'eseguibile con un editor esadecimale. "la_password" si legge tranquillamente in chiaro.

inutile non tanto, perchè:
1)fa il suo lavoro
2)sebbene avessi già scritto che non è la più sicura, questo sistema non impone di chiamare la variabile chiave "la_password" e quindi si può incrementare la sicurezza contro un eventuale reverse esadecimale
 
basterebbe implementare un semplice algoritmo per cercare di criptare la_password in modo che non sia rintracciabile nel reverse o sbaglio?
 
basterebbe implementare un semplice algoritmo per cercare di criptare la_password in modo che non sia rintracciabile nel reverse o sbaglio?

Questo modo è più corretto. Usi qualcosa come bcrypt, e sia H(s) la funzione hash che ti da (bcrypt.hash(string, salt) in codice). Facendo finta che H sia la funzione hash usata (visto che è solo un esempio puoi usare una funzione che restituisce la stringa data) dovresti fare qualcosa tipo (in pseudo-codice):

Codice:
H(s : string) : string {
  // qui useresti la funzione hash vera, es bcrypt
  return s
}

PWD := "Xe2938Mh" // calcoli l'hash della tua password separatamente. A partire da questo non c'è modo di calcolare la password originaria se non usando brute-force
main() {
   user_input := input("password:")
   if (H(user_input) == PWD) {
      // password corretta 
    } else {
      // password sbagliata
    }
}

KaT_624 ha detto:
2)sebbene avessi già scritto che non è la più sicura, questo sistema non impone di chiamare la variabile chiave "la_password" e quindi si può incrementare la sicurezza contro un eventuale reverse esadecimale

No non aumenti la sicurezza. Cambia solo che invece di beccare la password al primo tentantivo la becca all'n-esimo tentativo, con n = numero di string literal nell'eseguibile.

Il_Taglia ha detto:
Inoltre aggiungerei che le persone a cui verrebbe in mente di fare un reverse decimale non sono molte...

Ma esistono, così aggiungendo una sola funzione abbiamo migliorato la sicurezza notevolmente (da non sicura a forse sicura).
 
Pubblicità
Pubblicità
Indietro
Top