PDA

View Full Version : [C/C++]Nascondere caratteri inseriti


MissaW_RaZ_98
11-11-2011, 16:15
Salve a tutti
Vorrei sapere come nascondere i caratteri che inserisco nei linguaggi C/C++

Mi servirebbe per nascondere una password....

grazie :D

cirano994
11-11-2011, 16:49
Salve a tutti
Vorrei sapere come nascondere i caratteri che inserisco nei linguaggi C/C++

Mi servirebbe per nascondere una password....

grazie :D

So che non ti sarà molto d'aiuto, ma io, strano ma vero, so farlo con Assembly ma non in C. :asd:

Interesserebbe anche a me.. :D

Grazie

MissaW_RaZ_98
11-11-2011, 16:58
Bene,a questo punto siamo in due :mc:

Aspettiamo risposte....:)

clockover
11-11-2011, 16:59
Non lo so.... non ci ho mai provato... però stavo pensando... e spero di non dire cacchiate...

forse potresti provare a chiudere il flusso per lo stdout e ad ogni input di carattere (che ovviamente bufferizzerai da qualche parte) mandi un asterisco o proprio niente... quando ho un po di tempo ci provo... fammi sapere se è possibile

clockover
11-11-2011, 17:02
Non va ho fatto una prova al volo :D

int main(){
fclose(stdout);
char t = getchar();
printf("Caio %c\n", t);
return 0;
}

MissaW_RaZ_98
11-11-2011, 17:14
ah,peccato...:(

Fa niente,cambio progetto :)

clockover
11-11-2011, 17:19
Non so cosa ci devi fare ma secondo me dovresti insistere :D :D

MissaW_RaZ_98
11-11-2011, 17:30
niente...volevo solo imparare qualcosina in più col c/c++

clockover
11-11-2011, 17:31
A ok... comunque c'è una nuova pista se ti interessa ancora...

int getch(void)

ciao

MissaW_RaZ_98
11-11-2011, 17:42
ma al posto di void cosa ci devo mettere??

Scusa per questa domanda(sono un principiante in programmazione)

cirano994
11-11-2011, 17:47
Ci ho provato ma dava problemi sulla stringa di memorizzazione... :mc:

In compenso ho trovato questo funzionante :D :#include <cstdlib>
#include <iostream>
#include <conio.h>
using namespace std;
#define MAX_LENGHT 128
#define ENTER 13
#define BACKSPACE 8

char ch;
char password[MAX_LENGHT];
const char *mypass="asilas";
int pos=0;

int main()
{
cout <<"Please enter the password:\n";
while(true)
{
ch=getch();
if(pos>=MAX_LENGHT) {cout<<'\a'; continue;} /* beep if password is too long */

if(ch==ENTER) break; /* User have pressed ENTER*/

else if(ch==BACKSPACE) /* BACKSPACE was pressed*/
{
cout <<"\b \b";
password[--pos]='\0';
}
else/* A..Z a...z BUG: I forgot what... */
{
cout <<"*";
password[pos++]=ch;
password[pos]='\0';
}
if(pos<=0) pos=0;
}

if(strcmp(password,mypass)==0) cout <<"\nCorrect password!\n";
else cout <<"\nAccess denied!\n";



cout.flush();
cin.get();
return EXIT_SUCCESS;
}


Ciao

MissaW_RaZ_98
11-11-2011, 17:58
ottimo
provo subito anch'io

MissaW_RaZ_98
11-11-2011, 18:04
funziona alla perfezione,però sto analizzando meglio il source code per capirlo bene :)

credo di averlo capito abbastanza bene....
però c'è una cosa che non capisco:cosa sono "\b" e "\a" ?

Floris
11-11-2011, 20:33
Sequenze di escape. Cerca nella documentazione C++ relativa a stringhe e caratteri...e dovrebbe venirti indicato il significato...come \n per indicare nuova riga.

Perseverance
11-11-2011, 21:17
In qualche modo è possibile farlo in maniera pulita usando la funzione kbhit() e in occorrenza della pressione di un tasto andare a leggere quale carattere è stato premuto dallo stream della tastiera.
Domani provo

british
13-11-2011, 21:04
Salve a tutti
Vorrei sapere come nascondere i caratteri che inserisco nei linguaggi C/C++

Mi servirebbe per nascondere una password....

grazie :D

Sistema operativo? Se Unix e simili puoi usare la funzione di libreria getpass() anche se è stata dichiarata obsoleta.
In generale quello che devi fare è disabilitare l'echoing sul terminale in uso.

ciao!