Jump to content

Recommended Posts

Posted

Boa dia,

Ainda sou um newbie em C++ e estava a tentar esconder a password com algum tipo de char (asteriscos, cardinais..) mas não encontro algo que funcione e que tenha uma boa explicação.

//Password
printf("Introduza a sua password:\n");
fflush(stdin);
gets_s(strTemp);
strcpy_s(u[r.novoRegistoUser].password, strTemp);

Se alguém me pudesse ajudar agradecia 😉

Posted

Não sei muito disso mas penso que isso dos asteriscos é mais comum nos browsers e dá enterder que queres fazer isso na linha de comandos.

Em linux a solução mais simples passa por aqui: http://www.cyberciti.biz/faq/linux-script-to-prompt-for-password/

Isso faz com que durante a leitura da password não seja mostrado qualquer char no ecrã.

Eu começava por fazer um pequeno script em bash para esse efeito tal como indicado no link e o teu programa iria executar esse script.

O equivalente em windows não faço ideia...

Mas para fazer tudo em C++ espreita aqui: http://www.cplusplus.com/articles/E6vU7k9E/

Posted

Pois, eu estou a trabalhar em Win7, mas quando quiser trabalhar em Linux já sei, mas de qualquer forma obrigado, apenas tenho de pesquisar mais sobre essas duas primeiras livrarias no código que ainda não conheço muito bem, qualquer coisa eu volto a reponder a este tópico.

Posted

Boas nelson,

tentei deste forma:

//Password
printf("Introduza a sua password:\n");
fflush(stdin);
while ( (strTemp = getch() ) != 13)
{
 u[r.novoRegistoUser].password = strTemp;
 printf("*");
}

Mas dá-me um erro na linha do while, supostamente ele diz que nao consegue converter int para char, quando o strTemp tá declarado como string e um getch é um comando, tenho a livraria conio.h

O que poderá estar a causar isto?

Posted

Um exemplo

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

using namespace std;

int main()
{
   string pass = "";
   char ch;
   cout << "Enter pass\n";
   ch = _getch();
   while(ch != 13)
   {
       pass.push_back(ch);
       cout << '*';
       ch = _getch();
   }

   //
   if(pass.compare("pap")==0)    {
       cout << "\nAccess granted \n";
   }    else    {
       cout << "\nAccess aborted...\n";
   }

   return 0;
}

No entanto é apenas um exemplo, isso depois ainda tem algumas verificações extra (tamanho, delete, etc)

Posted

Adaptei o código:

//Password
printf("Introduza a sua password:\n");
fflush(stdin);
//gets_s(strTemp);
ch = _getch();
while(ch != 13)
{
 pass[MAXSTRING].push_back(ch);
 printf("*");
 ch = _getch();
}

Mas no entanto obti este erro:

Error 4 error C2228: left of '.push_back' must have class/struct/union

Algo que fiz mal? Consegui resolver outros erros que tinha, apesar deste erro

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.