"Mascarando" pseudo-senha digitada pelo usuário
Publicado por Sandro Marcell (última atualização em 14/03/2010)
[ Hits: 10.768 ]
Homepage: http://sanmarcell.wordpress.com
Uma função bem legal que encontrei em www.unix.com escrita em Ksh. Ela mascara uma pseudo-senha digitada pelo usuário utilizando para isso um caractere qualquer, tipo:
Digite sua senha: *****
Achei super interessante e então resolvi "portá-la" para o Bash.
Versão original em Ksh: http://www.unix.com/shell-programming-scripting/49490-reading-password-echo-character.html
#
# Funcao que 'mascara' uma pseudo-senha digitada pelo usuario.
#
# Ex.:
# Digite a senha: *********
#
# Versao original escrita em Ksh'93 por 'Perderabo'
# http://www.unix.com/shell-programming-scripting/49490-reading-password-echo-character.html
#
# Portada para o Bash-3.1.17 por Sandro Marcell <sandro_marcell@yahoo.com.br>
#
# Mais detalhes: 'man bash', 'man stty' e 'man dd'
#
# Obs.: Caso a tecla 'backspace' nao funcione, utilize o comando 'showkey -a'
# para descobrir seu valor e altere conforme o caso.
#
# P.S. Foram feitas pequenas alteracoes em relacao ao codigo original! =)
#
exec 3>&1
function mascaraSenha {
local mascara backspace enter terminal_info caractere teclas senha
local -a caracteres
mascara="*"
# Teclas de controle
enter=$(printf '\r')
backspace=$(printf '\b')
printf "%s" "$1" >&3
# Salva a configuracao corrente do terminal
terminal_info=$(stty --save)
# Desabilitando impressao de caracteres
stty -echo -icrnl -icanon min 1 time 0
caractere=0
while true
do
# Teclas pressionadas
teclas=$(dd bs=1 count=1 status=noxfer 2> /dev/null)
case $teclas in
$enter)
break ;;
$backspace)
# Volta o cursor uma posicao
if ((caractere))
then
printf "%s" "$backspace $backspace" >&3
((caractere--))
fi
;;
*)
# Imprimi a 'mascara' na tela
printf "%c" "$mascara" >&3
# Armazena os caracteres especificados
caracteres[caractere]="$teclas"
((caractere++))
esac
done
# Restaura a configuracao do terminal
stty "$terminal_info" ; echo "" >&3
# Devolve a 'senha' sem caracteres de controle
for ((i = 0 ; i < caractere ; i++))
do
senha+="${caracteres[i]}"
done
echo "$senha"
return 0
}
senha=$(mascaraSenha "Senha: ")
exec 3>&-
echo "A senha digitada foi '$senha'"
# Fim
Testando se a conexão com a Internet está ativa
POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - RESTAURANDO MBOX VIA SSH
Script recolher log's servidor
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Preciso recuperar videos *.mp4 corrompidos (10)
É normal não gostar de KDE? (11)
Secure boot, artigo interessante, nada técnico. (2)









