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 <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:
kxggsl6xgzo9
Gera uma senha WPA. Código de 64 caracteres em hexadecimal:
44dd3fe6fa7ba3a8356f36005ff69fb67e49321464fc6f6baea0026ab683d4dc
Gera uma senha com 6 caracters com as vogais:
iuIaEi
O Script senhas
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #!/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 |

Bom dia amigo,
Muito bom o código, parabéns!