"Mascarando" pseudo-senha digitada pelo usuário
Publicado por Sandro Marcell (última atualização em 14/03/2010)
[ Hits: 10.777 ]
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
Cadastro automatizado para DHCP, Sarg, ethers e hosts
Script para Criar/Modificar Usuarios No Ldap + Samba
Fluxbox: Wallpapers aleatórios
BACKUP para micros com Windows XP utilizando o share administrativo ( C$ )
Apostila interativa de linux (incompleto)
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Estou tentando ser legalista, mas tá complicado! (1)
PERFIL CRIADO NO SAMBA AD DC NÃO LOGA NO WINDOWS 10 E 11 (2)
É normal não gostar de KDE? (17)
PERFIL CRIADO NO SAMBA AD DC NÃO LOGA NO WINDOWS 10 E 11 (1)









