"Mascarando" pseudo-senha digitada pelo usuário
Publicado por Sandro Marcell (última atualização em 14/03/2010)
[ Hits: 10.891 ]
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
Bashblog v1.0 0 - cria um microblog em HTML5
Apagando 2 linhas do fim de um arquivo
Trocar string A por string B em vários arquivos
Criando vários usuários no LDAP a partir de um arquivo
EPD 0.5 (Criando e editando pacotes de instalação debian)
Como enviar dicas ou artigos para o Viva o Linux
Como Ativar a Aceleração por GPU (ROCm) no Ollama para AMD Navi 10 (RX 5700 XT / 5600) no Gentoo
Como criar um make.conf no Gentoo (para iniciantes)
Como instalar o Open WebUI para Ollama no Gentoo (com systemd)
Configuração de IP fixo via nmcli e resolução de nomes via /etc/hosts no Gentoo
Removendo o bloqueio por erros de senha no Gentoo (systemd)
Papel de Parede Animado no KDE Plasma 6 (Com dicas para Gentoo)
Homebrew: o gerenciador de pacotes que faltava para o Linux!
Removendo a trava de versão do Project Brutality para GZDoom/UZDoom
É o fim da produção de hollywood e da netflix... (2)
O que você está ouvindo agora? [2] (230)









