Fevereiro 26, 2008 at 8:39 pm

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”:

rudson@khelben:$ 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:

rudson@khelben:$ senhas 12 alf
kxggsl6xgzo9

Gera uma senha WPA. Código de 64 caracteres em hexadecimal:

rudson@khelben:$ senhas 64 hex
44dd3fe6fa7ba3a8356f36005ff69fb67e49321464fc6f6baea0026ab683d4dc

Gera uma senha com 6 caracters com as vogais:

rudson@khelben:$ senhas 6 aeiouAEIOU
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

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

One comment

  1. Allan Cristian

    Março 11th, 2010 at 11:36 am

    Bom dia amigo,

    Muito bom o código, parabéns!

Leave a reply

Spam Protection by WP-SpamFree

Back to top