Senhas Aleatórias
Volta e meia tenho que gerar senhas aleatórias e em algumas vezes, existe alguma limitação de “caracteres”, como senhas decimais, hexadecimais, alfanuméricos sem símbolos, …
Geralmente recorro a soluções diversas encontradas pela rede, mas na última vez que tive que gerar uma senha hexadecimal, achei que já era hora de criar uma solução personalizada.
O Bash Script apresentado a segui gera senhas, sorteando caracteres predefinidos de uma string. Sei que a idéia não é original, se é que alguma pode ser original em programação atualmente, mas achei que ficou bem simples e elegante.
Como funciona
O Script deve ser colocado em um diretório que esteja definido em sua variável PATH, algo como /usr/bin ou /usr/local/bin. Este último acho mais conveniente.
Todas as opções do Script podem ser conhecidas comandando apenas “senhas”:
senhas senhas <number_of_bytes> <type> where type is: hexadecimal or hex decimal or dec octal or oct binarie or bin alfanumeric or alf symbols or sym string enter
Ou seja, você deve passar dois argumentos para o gerador de senhas. O primeiro é o número de caracteres que devem ser gerados. O segundo é o tipo de senha que deve ser gerado:
- hex – para hexadecimal
- dec – para decimal
- oct – para octal
- bin – para binário
- alf – para alfanumérico (apenas letras em minúsculo)
- sym – para letras, números e simbolos
- string – aqui você pode entrar com uma string qualquer, onde a senha será gerada sorteando os caracteres desta string
Alguns Exemplos:
Gera uma senha com 12 caracteres alfanuméricos:
senhas 12 alf kxggsl6xgzo9
Gera uma senha WPA. Código de 64 caracteres em hexadecimal:
senhas 64 hex 44dd3fe6fa7ba3a8356f36005ff69fb67e49321464fc6f6baea0026ab683d4dc
Gera uma senha com 6 caracters com as vogais:
senhas 6 aeiouAEIOU iuIaEi
O Script senhas
#!/bin/bash
#
# Gerador de senhas
PROGRAM=`basename $0`
function senha_help {
echo "$PROGRAM <number_of_bytes><type>
where type are:
hexadecimal or hex
decimal or dec
octal or oct
binarie or bin
alfanumeric or alf
symbols or sym
string enter"
exit 1
}
if [ $# -ne 2 ]; then
senha_help
fi
case $2 in
'hexadecimal'|'hex')
STRING='0123456789abcdef'
;;
'decimal'|'dec')
STRING='0123456789'
;;
'octal'|'oct')
STRING='01234567'
;;
'binarie'|'bin')
STRING='01'
;;
'alfanumeric'|'alf')
STRING='0123456789abcdefghijklmnopqrstuvxywz'
;;
'symbols'|'sym')
STRING='0123456789abcdefghijklmnopqrstuvxywzABCDEFGHIJKLMNOPQRSTUVXYWZ!@#$%^&*()_+-=[]{}|;:",./<>?~`'
;;
*)
STRING="$2"
;;
esac
BASE=`echo -n $STRING | wc -c`
for i in $( seq 1 $1 ); do
N=$(( $RANDOM % $BASE + 1 ))
echo $STRING | cut -c$N
done | tr -d '\012'
echo
1 comentário até agora