código. senha pedida não deve aparecer. [RESOLVIDO]

1. código. senha pedida não deve aparecer. [RESOLVIDO]

Jeffersson
blow5

(usa Ubuntu)

Enviado em 29/09/2014 - 01:48h

Bom galera,estou criando um algoritmo de cadastro e em uma das etapas eu peço a senha para o usuario, so que eu queria que quando ele digitasse não mostrasse a senha dele,mas mostrasse asteriscos ou nem mesmo mostrasse. Tem como fazer isso?
Atenciosamente.


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 29/09/2014 - 10:20h

Não dá para fazer com C puro, pois a linguagem padronizada procura propositalmente não ter vínculos com dispositivos físicos específicos, como um terminal ou um teclado. Para conseguir o que você quer, tem de entrar em especificidades do seu hardware e sistema operacional.

Um colega mencionou, acima, a função getpass(). O problema é que ela foi removida do padrão SUS (de Single Unix Specification) e do POSIX. No Linux, ela está marcada como obsoleta e com indicação clara na documentação de que não deve mais ser usada.

Não sei o porquê dessa obsolescência, mas tenho o palpite de que a não reentrância e algumas amarrações de tamanho máximo que passaram a não fazer muito sentido com mecanismos de autenticação mais novos devem ter pesado na decisão.

A alternativa que resta é fazer exatamente o que essa função fazia, mas manualmente. A saber:

0) Estudar profundamente a documentação de termios (“man 4 termios”).

1) Abrir (com open(), não com fopen()!) "/dev/tty" para leitura e escrita. Essa operação pode falhar se o programa for rodado sem um terminal associado (por exemplo: a partir do cron ou numa sessão de SSH que não tenha alocado um pseudo-terminal).

2) Com descritor recebido em (1), chamar tcgetattr() para salvar a configuração atual do terminal.

3) Ainda sobre o mesmo descritor, usar tcsetattr() para desligar o modo canônico do terminal e o eco de caracteres digitados, e possivelmente definir entrada caráter a caráter e sem timeout.

4) Fazer um loop com read() sobre o descritor recebido em (1) para ler caráter por caráter, testando sempre se ocorreu fim de arquivo (i.e. o terminal foi fechado) ou se o usuário teclou Enter. Se se desejar, imprimir um asterisco após ler cada caráter válido da senha.

5) Restaurar a configuração original do terminal.

6) Fechar o descritor recebido em (1).

3. Re: código. senha pedida não deve aparecer. [RESOLVIDO]

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 29/09/2014 - 08:43h

não sou da área.
aguarde outras respostas.
mudei um pouco o título do seu post, para dar mais visibilidade.


4. Re: código. senha pedida não deve aparecer. [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 29/09/2014 - 08:52h

Eu tambem estou aprendendo C, e estou fazendo um algoritmo parecido.
No livro que eu estou lendo fala-se sobre a função getpass().

#include <pwd.h>
#include <unistd.h>
char * getpass(const char *prompt); //prototipo da função


Se não for isso que você procura, espera que alguém que entenda + do assunto tire a sua duvida.


5. Re: código. senha pedida não deve aparecer. [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 29/09/2014 - 13:21h

Se tiver usando a API nativa do windows eh só criar um CONTROL ( edit ) com estilo "ES_PASSWORD".

T+.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts