[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] string aleatoria com 6 caracteres
From: |
.:::: Marcio ::::. |
Subject: |
Re: [shell-script] string aleatoria com 6 caracteres |
Date: |
Mon, 31 Jan 2005 14:43:26 -0200 |
Em Sun, 30 Jan 2005 14:37:32 -0200
"Eric Anderson" <address@hidden> digitou:
Sobre: [shell-script] string aleatoria com 6 caracteres
>
> preciso criar uma (67) string (s) aleatorias(2) -
sao senhas.
>
> o melhor comando do bash (linux) pra isso eh o
random mesmo?
>
> sds
>
> Eric Anderson
> CPD Via Net SAO
> 11-66432800
>
>
Oi Eric,
Fiz um script awk, clone do utilitário mkpasswd, que
pode
ser usado para este fim.
Ex.:
$ awk -f mkpasswd.awk -l60 -s0
fpckfegF0vrut3jpmbtldgldsplhnfnpdlTnftlvrdeuoujcxegstk
cfoufc
...script:
#!/bin/awk -f
# mkpasswd.awk --- Um clone do mkpasswd do pacote
Expect
#
# Márcio Mendonça <address@hidden>
# 20-jun-2004
#
# 21-jun-2004:
# Incuída duas linhas de código na função 'aleat()'
para
# se evitar seqüências repeditas ('rr', 'xxx',
'aa') na
# geração da string aleatória.
#
# Não repete números quando a quantidade de números
soli
# citada for igual ou inferior a dez.
#
# Evita seqüências de letras maiúsculas repetidas.
#
# 25-jun-2004:
# Corrigido o problema de substituir um caractere
maiúsculo
# ou um número por um simbolo especial, que resultava
em um
# caractere ou dígito a menos do que o solicitado.
#
# Criada função errmsg2() para erros de parâmetros.
#
# 'errmsg()' --- Emite uma mensagem de uso do script e
retorna 1.
function errmsg()
{
print "usage: awk -f mkpasswd.awk
[args]" > "/dev/stderr"
print " where arguments are:" >
"/dev/stderr"
printf " -l #\t(length of password,
default = 9)\n\
-d #\t(min # of digits, default = 2)\n\
-c #\t(min # of lowercase chars, default =
2)\n\
-C #\t(min # of uppercase chars, default =
2)\n\
-s #\t(min # of special chars, default =
1)\n " > "/dev/stderr"
exit 1
}
# 'errmsg2()' --- Uma segunda mensagem de erro.
function errmsg2(arg)
{
printf "passwd: bad argument %s:
unknown option\n", arg > "/dev/stderr"
exit 1
}
# aleat() --- Gera uma string aleatória
function aleat(quant, lower, lower_vet,
aleato,
aleatos)
{
lower = "abcdefghijklmnopqrstuvwyxz"
split(lower, lower_vet, "")
for(i = 1; i <= quant; i++){
aleatos = lower_vet[int(rand()
* 25) + 1]
# Evitando seqüências repetidas
de caracteres para
# geração de senhas melhores.
while(aleatos == substr(aleato,
length(aleato)))
aleatos =
lower_vet[int(rand()
* 25) + 1]
aleato = (aleato aleatos)
}
return aleato
}
BEGIN\
{
srand()
def_len = 9
def_up = def_di = 2
def_sp = 1
lower = "abcdefghijklmnopqrstuvwyxz"
upper = toupper(lower)
digit = "0123456789"
special =
"|,.;/<>:?][}{'`^~!@#$%&*-_+="
# Verificando a existências de opções
na linha de comandos...
if(ARGC > 1)
for(i = 1; i <= (ARGC - 1); i++)
if(ARGV[i] !~ /^-/){
user = ARGV[i]
ARGV[i] = ""
}
else {
op[i] = substr(ARGV[i],
2)
ARGV[i] = ""
}
# Recolhendo os parâmetros das
opções...
for(o in op){
if(substr(op[o], 1, 1) !~ /[ldCcs]/) #
Opção desconhecida?
errmsg()
if(substr(op[o], 2, 1) !~
/[[:digit:]]/) # .. e o argumento?
errmsg2(("-" op[o]))
opt[substr(op[o], 1, 1)] =
substr(op[o], 2)
}
if(opt["l"]) # Se a opção "l" existir
altera o default (def_len)
def_len = int(opt["l"])
if(opt["C"]) # Se a opção "C" existir
altera o default (def_up)
def_up = int(opt["C"])
if(opt["d"]) # Se a opção "d" existir
altera o default (def_di)
def_di = int(opt["d"])
if(opt["s"]) # Se a opção "s" existir
altera o default (def_sp)
def_sp = int(opt["s"])
# Gerando um string aleatória com a
quantidade especificada
# por def_len
passwd = aleat(def_len)
# picando tudo...
split(passwd, p, "")
split(upper, u, "")
split(digit, d, "")
split(special, s, "")
# Colocando os números aleatórios em
posições aleatórias...
while(r < def_di){
dig = d[int(rand() * 10) + 1]
al = p[int(rand() * def_len) +
1]
# Evitando números repetidos em
senhas com menos de
# dez dígitos..
if(def_di <= 10)
while(passwd ~ dig)
dig =
d[int(rand() *
10) + 1]
sub(al, dig, passwd)
r++
}
split(passwd, p, "") # Redividindo a
senha alterada
# Colocando letras maiúsculas
aleatórias em posições aleatórias...
while(x < def_up){
al = p[int(rand() * def_len) +
1]
dig = u[int(rand() * 25) + 1]
# NÃO substituir os números por
maiusculas.
while(al ~ /[[:digit:]]/) al =
p[int(rand() * def_len) + 1]
# Evitando seqüência de letras
maiúsculas repetidas...
while(passwd ~ dig)
dig = u[int(rand() *
24) + 1]
sub(al, dig, passwd)
x++
}
split(passwd, p, "") # Redividindo a
senha alterada
if(def_sp != 0){
while( w < def_sp){
spe =
s[int(rand() *
28) + 1]
al =
p[int(rand() *
def_len) + 1]
while(al ~
/[[:upper:]]/ || al ~ /[[:digit:]]/)
al =
p[int(rand() *
def_len) + 1]
sub(al, spe,
passwd)
w++
}
}
print passwd
}
##### FIM DO SCRIPT
--
" Eis que o os olhos do Senhor estão sobre os que o
temem, sobre os que esperam na sua misericórdia, para
livrar-lhes a alma da morte, e, no tempo da fome,
conservar-lhes a vida. Sl 33:18-19"
////
( O O )
=======oOO==(_)==OOo============
Márcio Alexandre S. Mendonça
address@hidden
Linux User #298595
.oooO Oooo.
=======( )===( )============
\ ( ) /
\_) (_/
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [shell-script] string aleatoria com 6 caracteres,
.:::: Marcio ::::. <=