My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# ----------------------------------------------------------------------------
# Gera uma senha aleatória de N caracteres únicos (não repetidos).
# Obs.: Sem opções, a senha é gerada usando letras e números.
#
# Opções: -p, --pro Usa letras, números e símbolos para compor a senha
# -n, --num Usa somente números para compor a senha
#
# Uso: zzsenha [--pro|--num] [n] (padrão n=8)
# Ex.: zzsenha
# zzsenha 10
# zzsenha --num 9
# zzsenha --pro 30
#
# Autor: Thobias Salazar Trevisan, www.thobias.org
# Desde: 2002-11-07
# Versão: 2
# Licença: GPL
# ----------------------------------------------------------------------------
zzsenha ()
{
zzzz -h senha "$1" && return

local posicao letra maximo senha
local n=8
local alpha='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
local num='0123456789'
local pro='-/:;()$&@.,?!' # teclado do iPhone, exceto aspas
local lista="$alpha$num" # senha padrão: letras e números

# Opções de linha de comando
while [ "${1#-}" != "$1" ]
do
case "$1" in
-p|--pro) shift; lista="$alpha$num$pro";;
-n|--num) shift; lista="$num";;
*) break ;;
esac
done

# Guarda o número informado pelo usuário (se existente)
[ "$1" ] && n="$1"

# Foi passado um número mesmo?
zztool -e testa_numero "$n" || return 1

# Já que não repete as letras, temos uma limitação de tamanho
maximo="${#lista}"
if [ "$n" -gt "$maximo" ]
then
echo "O tamanho máximo desse tipo de senha é $maximo"
return 1
fi

# Esquema de geração da senha:
# A cada volta é escolhido um número aleatório que indica uma
# posição dentro do $lista. A letra dessa posição é mostrada na
# tela e removida do $lista para não ser reutilizada.
while [ "$n" -ne 0 ]
do
n=$((n-1))
posicao=$((RANDOM % ${#lista} + 1))
letra=$(echo -n "$lista" | cut -c "$posicao")
lista=$(echo "$lista" | tr -d "$letra")
senha="$senha$letra"
done

# Mostra a senha
echo "$senha"
}

Change log

r710 by aureliojargas on Mar 29, 2012   Diff
SEGURANÇA: $1 colocado entre aspas na
chamada padrão zzzz -h de todas as
funções.
Go to: 
Sign in to write a code review

Older revisions

r689 by aureliojargas on Mar 29, 2012   Diff
SEGURANÇA: zzsenha: colocadas aspas ao
redor das variáveis.
r669 by aureliojargas on Mar 28, 2012   Diff
lint: removendo espaços inúteis. Parte
2.
r502 by aureliojargas on May 21, 2011   Diff
zzsenha: Agora usando a opção -e na
zztool testa_numero.
All revisions of this file

File info

Size: 1973 bytes, 69 lines
Powered by Google Project Hosting